天天看點

[HTTP協定]HTTP封包入門

HTTP協定:

1.無連接配接:每次隻處理一個請求,伺服器處理完一個http請求後自動斷開連結
        2.無狀态:每次請求都是獨立的,不會保留前後請求的資料.如果需要前後請求的資料必須重新傳遞
        3.靈活:可以傳輸任意類型的資料, 傳輸的類型由contentType指定    
           

HTTP協定的長連接配接和短連接配接,實質上是TCP協定的長連接配接和短連接配接。

TCP短連接配接長連接配接都由用戶端發起,而TCP長連接配接的保活功能主要為伺服器應用提供。如果用戶端已經消失而連接配接未斷開,則會使得伺服器上保留一個半開放的連接配接,而伺服器又在等待來自用戶端的資料,此時伺服器将永遠等待用戶端的資料。保活功能就是試圖在服務端器端檢測到這種半開放的連接配接。也因為短連接配接、長連接配接的實作在HTTP之外,與HTTP無關,從HTTP自身來看,HTTP依然是無連接配接的。  
           

HTTP封包:

[HTTP協定]HTTP封包入門
[HTTP協定]HTTP封包入門

在這個浏覽器發出的請求封包裡,第一行“GET / HTTP/1.1”就是請求行,而後面的“Host”“Connection”等等都屬于 header,封包的最後是一個空白行結束,沒有 body。

請求行:

了解了 HTTP 封包的基本結構後,我們來看看請求封包裡的起始行也就是請求行(request line),它簡要地描述了用戶端想要如何操作伺服器端的資源。

請求行由三部分構成:

請求方法:是一個動詞,如 GET/POST,表示對資源的操作;
      請求目标:通常是一個 URI,标記了請求方法要操作的資源;
      版本号:表示封包使用的 HTTP 協定版本。
           

這三個部分通常使用空格(space)來分隔,最後要用 CRLF 換行表示結束。

[HTTP協定]HTTP封包入門
GET / HTTP/1.1
           

狀态行:

看完了請求行,我們再看響應封包裡的起始行,在這裡它不叫“響應行”,而是叫“狀态行”(status line),意思是伺服器響應的狀态。

比起請求行來說,狀态行要簡單一些,同樣也是由三部分構成:

版本号:表示封包使用的 HTTP 協定版本;
 狀态碼:一個三位數,用代碼的形式表示處理的結果,比如 200 是成功,500 是伺服器錯誤;
 原因:作為數字狀态碼補充,是更詳細的解釋文字,幫助人了解原因。   
           
[HTTP協定]HTTP封包入門
HTTP/1.1 200 OK
HTTP/1.1 400 Not Found
           

頭部字段:

請求行或狀态行再加上頭部字段集合就構成了 HTTP 封包裡完整的請求頭或響應頭,這裡有兩個示意圖,可以看一下。

[HTTP協定]HTTP封包入門
[HTTP協定]HTTP封包入門