HTTP協定:
1.無連接配接:每次隻處理一個請求,伺服器處理完一個http請求後自動斷開連結
2.無狀态:每次請求都是獨立的,不會保留前後請求的資料.如果需要前後請求的資料必須重新傳遞
3.靈活:可以傳輸任意類型的資料, 傳輸的類型由contentType指定
HTTP協定的長連接配接和短連接配接,實質上是TCP協定的長連接配接和短連接配接。
TCP短連接配接長連接配接都由用戶端發起,而TCP長連接配接的保活功能主要為伺服器應用提供。如果用戶端已經消失而連接配接未斷開,則會使得伺服器上保留一個半開放的連接配接,而伺服器又在等待來自用戶端的資料,此時伺服器将永遠等待用戶端的資料。保活功能就是試圖在服務端器端檢測到這種半開放的連接配接。也因為短連接配接、長連接配接的實作在HTTP之外,與HTTP無關,從HTTP自身來看,HTTP依然是無連接配接的。
HTTP封包:
在這個浏覽器發出的請求封包裡,第一行“GET / HTTP/1.1”就是請求行,而後面的“Host”“Connection”等等都屬于 header,封包的最後是一個空白行結束,沒有 body。
請求行:
了解了 HTTP 封包的基本結構後,我們來看看請求封包裡的起始行也就是請求行(request line),它簡要地描述了用戶端想要如何操作伺服器端的資源。
請求行由三部分構成:
請求方法:是一個動詞,如 GET/POST,表示對資源的操作;
請求目标:通常是一個 URI,标記了請求方法要操作的資源;
版本号:表示封包使用的 HTTP 協定版本。
這三個部分通常使用空格(space)來分隔,最後要用 CRLF 換行表示結束。
GET / HTTP/1.1
狀态行:
看完了請求行,我們再看響應封包裡的起始行,在這裡它不叫“響應行”,而是叫“狀态行”(status line),意思是伺服器響應的狀态。
比起請求行來說,狀态行要簡單一些,同樣也是由三部分構成:
版本号:表示封包使用的 HTTP 協定版本;
狀态碼:一個三位數,用代碼的形式表示處理的結果,比如 200 是成功,500 是伺服器錯誤;
原因:作為數字狀态碼補充,是更詳細的解釋文字,幫助人了解原因。
HTTP/1.1 200 OK
HTTP/1.1 400 Not Found
頭部字段:
請求行或狀态行再加上頭部字段集合就構成了 HTTP 封包裡完整的請求頭或響應頭,這裡有兩個示意圖,可以看一下。