HTTP服務器
一、採用的相關重要協議
- http協議
- TCP協議
- DNS協議
二、各協議的作用
- HTTP
針對目標web服務器生成HTTP請求報文 - TCP
爲了方便通信,將HTTP請求按序號分爲多個報文段,把每個報文段可靠的傳送給對方。 - IP
搜索對方IP地址,一邊中轉一邊傳送 - TCP
接受報文段,並按原來的順序重組請求報文 - HTTP
對web服務器請求的內容進行處理
三、HTTP協議的特點
- 無連接,每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用
這種方式可以節省傳輸時間。(http/1.0具有的功能,http/1.1兼容) - 無狀態
- 簡單快速,HTTP服務器的程序規模小,因而通信速度很快。
- 靈活,HTTP允許傳輸任意類型的數據對象,正在傳輸的類型由Content-Type加以標記
- 協議本身並不會保留你之前的一切請求或者響應,這是爲了更快的處理大量的事務,確保協議的可伸縮性
- HTTP/1.1版本中給出一種持續連接的機制。
- HTTP(超文本傳輸協議)是基於TCP的連接方式進行網絡連接。
四、瀏覽器的URL格式
http://host":"port
- http表示要通過HTTP協議來定位網絡資源
- host表示合法的Internet主機域名或者IP地址
- port指定一個端口號,缺省80
- abs_path制定請求資源的URL
- 如果URL中沒有給出abs_path,那麼當它作爲請求URI時,必須以“/”的形式給出,通常這個工作瀏覽器自動幫
我們完成。
五、HTTP的請求與響應
1. HTTP的請求方法
- GET
獲取資源,獲取被URI標識的資源 - POST
POST 主要用來傳輸數據,而 GET 主要用來獲取資源。 - PUT
上傳文件,由於自身不帶驗證機制,任何人都可以上傳文件,因此存在安全性問題,一般不使用該方法。 - HEAD
和 GET 方法一樣,但是不返回報文實體主體部分。
主要用於確認 URL 的有效性以及資源更新的日期時間等。 - DELETE
與 PUT 功能相反,並且同樣不帶驗證機制。 - PATCH
對資源進行部分修改 - OPTIONS
查詢指定的 URL 能夠支持的方法。
會返回 Allow: GET, POST, HEAD, OPTIONS 這樣的內容. - CONNECT
要求在與代理服務器通信時建立隧道
使用 SSL(Secure Sockets Layer,安全套接層)和 TLS(Transport Layer Security,傳輸層安全)協議把通信內容加密後經網絡隧道傳輸。 - TRACE
服務器會將通信路徑返回給客戶端。
發送請求時,在 Max-Forwards 首部字段中填入數值,每經過一個服務器就會減 1,當數值爲 0 時就停止傳輸。
通常不會使用 TRACE,並且它容易受到 XST 攻擊(Cross-Site Tracing,跨站追蹤)。 - LINK
UNLINK
- HTTP響應狀態碼
1xx 信息
- 100 Continue :表明到目前爲止都很正常,客戶端可以繼續發送請求或者忽略這個響應。
2xx 成功
- 200 OK
- 204 No Content :請求已經成功處理,但是返回的響應報文不包含實體的主體部分。一般在只需要從客戶端往服務器發送信息,而不需要返回數據時使用。
- 206 Partial Content :表示客戶端進行了範圍請求。響應報文包含由 Content-Range 指定範圍的實體內容。
3xx 重定向
- 301 Moved Permanently :永久性重定向 需要進行書籤引用的變更
- 302 Found :臨時性重定向 不需要對書籤引用變更
- 303 See Other :和 302 有着相同的功能,但是 303 明確要求客戶端應該採用 GET 方法獲取資源。
- 注:雖然 HTTP 協議規定 301、302 狀態下重定向時不允許把 POST 方法改成 GET 方法,但是大多數瀏覽器都會在 301、302 和 303 狀態下的重定向把 POST 方法改成 GET 方法。
- 304 Not Modified :如果請求報文首部包含一些條件,例如:If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,如果不滿足條件,則服務器會返回 304 狀態碼。
- 307 Temporary Redirect :臨時重定向,與 302 的含義類似,但是 307 要求瀏覽器不會把重定向請求的 POST 方法改成 GET 方法。
4xx 客戶端錯誤
- 400 Bad Request :請求報文中存在語法錯誤。
- 401 Unauthorized :該狀態碼錶示發送的請求需要有認證信息(BASIC 認證、DIGEST 認證)。如果之前已進行過一次請求,則表示用戶認證失敗。
- 403 Forbidden :請求被拒絕,服務器端沒有必要給出拒絕的詳細理由。
- 404 Not Found
5xx 服務器錯誤
- 500 Internal Server Error :服務器正在執行請求時發生錯誤。
- 503 Service Unavailable :服務器暫時處於超負載或正在進行停機維護,現在無法處理請求。
六、HTTP CGI機制
CGI(Common Gateway Interface) 是WWW技術中最重要的技術之一,有着不可替代的重要地位。CGI是外部應用程序(CGI程序)與WEB服務器之間的接口標準,是在CGI程序和Web服務器之間傳遞信息的過程。其實,要真正理解CGI並不簡單,首先我們從現象入手,瀏覽器除了從服務器下獲得資源(網頁,圖片,文字等),有時候還有能上傳一些東西(提交表單,註冊用戶之類的),看看我們目前的http只能進行獲得資源,並不能夠進行上傳資源,所以目前http並不具有交互式。爲了讓我們的網站能夠實現交互式,我們需要使用CGI完成,時刻記着,我們目前是要寫一個http,所以,CGI的所有交互細節,都需要我們來完成。
理論上,可以使用任何語言來編寫CGI程序。注意,http提供CGI機制,和CGI程序是兩碼事,就好比學校(http)提供教學(CGI機制)平臺,學生(CGI程序)來學習。
- 我們首先來理解一下GET和POST方法的區別
GET方法從瀏覽器傳參數給http服務器時,是需要將參數跟到URI後面。
如:
https://www.baidu.com/s?
ie=utf8&f=3&rsv_bp=0&rsv_idx=1&tn=baidu&wd=ascii%E7%A0%81%E8%A1%A8&rsv_pq=c3b36e65000029a8&rsv_t=8c2a6N4WqJp6pn8wSPmrfETVJGIgC9hW6F041xz47x0FaHjFC3UE2gh9Ofk&rqlang=cn&rsv_enter=1&rsv_sug3=2&rsv_sug1=1&rsv_sug7=100&rsv_sug2=1&prefixsug=as&rsp=0&inputT=2214&rsv_sug4=2214
POST方法從瀏覽器傳參數給http服務器時,是需要將參數放的請求正文的。
- GET方法,如果沒有傳參,http按照一般的方式進行,返回資源即可.
- GET方法,如果有參數傳入,http就需要按照CGI方式處理參數,並將執行結果(期望資源)返回給瀏
覽器。 - POST方法,一般都需要使用CGI方式來進行處理。
具體流程見盜圖如下: