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 報文裏完整的請求頭或響應頭,這裏有兩個示意圖,可以看一下。