概述
HTTP 是基於 TCP/IP 協議的應用層協議,它不涉及數據包(packet)的傳輸,主要是規定客戶端和服務器之間的通訊格式,默認使用 80 端口。
HTTP 協議最先版本是 HTTP/0.9,經歷了 HTTP/1.0 和 HTTP/1/1 的發展,到目前爲止已是 HTTP/2.0 。其中 HTTP/1.0 最爲廣泛也是目前使用最久的一個版本。
HTTP 協議主要有如下幾個特色:
- 支持 B/S 和 C/S 模式。
- 簡單快速。客戶端向服務器請求時,只須要傳送請求方法和路徑。
- 靈活。HTTP 容許傳輸任意類型的數據對象。
- 無鏈接。每次鏈接只處理一個請求。HTTP/0.9 和 HTTP/1.0 採用非持久鏈接,HTTP/1.1 採用持久鏈接。
- 無狀態。HTTP 協議是無狀態協議,對事務處理沒有記憶能力。一方面,若後續處理須要上一次的信息,那麼這些數據須要重傳,這致使鏈接傳輸的數據量大增。另外一方面,服務器不須要前面的信息時它的應答就會很快。
無狀態協議
HTTP 協議是無狀態的。所謂無狀態,是指服務器不會保存客戶端請求的數據,這樣同一個客戶端此次請求和上一個請求是沒有對應關係的,對服務器來講,每個請求都是全新的,它並不知道兩個請求來自同一個客戶端。
爲了解決這個問題,瀏覽器引入了 Cookie 機制,每次請求客戶端都將 Cookie 中的數據所有發給服務端,而服務端將數據寫入 Cookie 響應給客戶端。
HTTP/1.1 持久鏈接
在 HTTP/0.9 和 HTTP/1.0 使用非持久鏈接。在非持續鏈接下,每一個 TCP 只鏈接一個 Web 對象,鏈接在一次 請求-迴應 後都會關閉,而持續鏈接可讓一個鏈接被多個請求重複利用。這種鏈接持久化顯著減小了請求延遲,由於客戶不用在首次請求後再次進行 TCP 交互確認建立鏈接。HTTP/1.1 引入了持續鏈接機制,沒必要爲每一個 web 對象建立一個新的鏈接,一個鏈接能夠傳送多個對象。
HTTP/1.1 還進行了寬帶優化,如引入了分塊傳輸編碼來容許流化傳輸持續鏈接上發送的內容,取代原先的 buffer 模式。HTTP 管道容許客戶在上一個迴應被收到前發送多重請求從而進一步減小延遲的時間。
HTTP/1.1 管道機制
HTTP/1.1 引入了管道機制,管道機制前提是在持久鏈接下完成。在同一個 TCP 鏈接中,客戶端能夠同時發生多個請求,而不像之前那樣在同一個 TCP 鏈接中發出請求後須要等待服務器作出迴應,而後才能發生下一個請求。不過按 HTTP/1.1 協議,服務器端必須按客戶端請求的順序恢復請求。
工做流程
一次 HTTP 請求-響應 稱爲一個事務
1)客戶端與服務器創建鏈接。由於 HTTP 協議是基於 TCP 協議的,因此每次創建鏈接時都要通過三次握手。
2)創建鏈接後,客戶端發送一個請求給服務端。
3)服務端接收請求後,給予相應的響應消息。
4)客戶端接收服務器響應的消息,而後客戶端與服務器斷開鏈接。
參考文章: