一、HTTP1.0 HTTP協議的第二個版本,第一個在通訊中指定版本號的HTTP協議版本 HTTP 1.0 瀏覽器與伺服器只保持短暫的連接,每次請求都需要與伺服器建立一個TCP連接 伺服器完成請求處理後立即斷開TCP連接,伺服器不跟蹤每個客戶也不記錄過去的請求 簡單來講,每次與伺服器交互,都需要新開 ...
一、HTTP1.0
HTTP
協議的第二個版本,第一個在通訊中指定版本號的HTTP協議版本
HTTP 1.0
瀏覽器與伺服器只保持短暫的連接,每次請求都需要與伺服器建立一個TCP
連接
伺服器完成請求處理後立即斷開TCP
連接,伺服器不跟蹤每個客戶也不記錄過去的請求
簡單來講,每次與伺服器交互,都需要新開一個連接
例如,解析html
文件,當發現文件中存在資源文件的時候,這時候又創建單獨的鏈接
最終導致,一個html
文件的訪問包含了多次的請求和響應,每次請求都需要創建連接、關係連接
這種形式明顯造成了性能上的缺陷
如果需要建立長連接,需要設置一個非標準的Connection欄位 Connection: keep-alive
二、HTTP1.1
在HTTP1.1
中,預設支持長連接(Connection: keep-alive
),即在一個TCP連接上可以傳送多個HTTP
請求和響應,減少了建立和關閉連接的消耗和延遲
建立一次連接,多次請求均由這個連接完成
這樣,在載入html
文件的時候,文件中多個請求和響應就可以在一個連接中傳輸
同時,HTTP 1.1
還允許客戶端不用等待上一次請求結果返回,就可以發出下一次請求,但伺服器端必須按照接收到客戶端請求的先後順序依次回送響應結果,以保證客戶端能夠區分出每次請求的響應內容,這樣也顯著地減少了整個下載過程所需要的時間
同時,HTTP1.1
在HTTP1.0
的基礎上,增加更多的請求頭和響應頭來完善的功能,如下:
- 引入了更多的緩存控制策略,如If-Unmodified-Since, If-Match, If-None-Match等緩存頭來控制緩存策略
- 引入range,允許值請求資源某個部分
- 引入host,實現了在一臺WEB伺服器上可以在同一個IP地址和埠號上使用不同的主機名來創建多個虛擬WEB站點
並且還添加了其他的請求方法:put
、delete
、options
...
三、HTTP2.0
而HTTP2.0
在相比之前版本,性能上有很大的提升,如添加了一個特性:
- 多路復用
- 二進位分幀
- 首部壓縮
- 伺服器推送
多路復用
HTTP/2
復用TCP
連接,在一個連接里,客戶端和瀏覽器都可以同時發送多個請求或回應,而且不用按照順序一一對應,這樣就避免了”隊頭堵塞”
二進位分幀
幀是HTTP2
通信中最小單位信息
HTTP/2
採用二進位格式傳輸數據,而非 HTTP 1.x
的文本格式,解析起來更高效
將請求和響應數據分割為更小的幀,並且它們採用二進位編碼
HTTP2
中,同功能變數名稱下所有通信都在單個連接上完成,該連接可以承載任意數量的雙向數據流
每個數據流都以消息的形式發送,而消息又由一個或多個幀組成。多個幀之間可以亂序發送,根據幀首部的流標識可以重新組裝,這也是多路復用同時發送數據的實現條件
首部壓縮
HTTP/2
在客戶端和伺服器端使用“首部表”來跟蹤和存儲之前發送的鍵值對,對於相同的數據,不再通過每次請求和響應發送
首部表在HTTP/2
的連接存續期內始終存在,由客戶端和伺服器共同漸進地更新
伺服器推送
HTTP2
引入伺服器推送,允許服務端推送資源給客戶端
伺服器會順便把一些客戶端需要的資源一起推送到客戶端,如在響應一個頁面請求中,就可以隨同頁面的其它資源
免得客戶端再次創建連接發送請求到伺服器端獲取
這種方式非常合適載入靜態資源
四、總結
HTTP1.0:
- 瀏覽器與伺服器只保持短暫的連接,瀏覽器的每次請求都需要與伺服器建立一個TCP連接
HTTP1.1:
- 引入了持久連接,即TCP連接預設不關閉,可以被多個請求復用
- 在同一個TCP連接裡面,客戶端可以同時發送多個請求
- 雖然允許復用TCP連接,但是同一個TCP連接裡面,所有的數據通信是按次序進行的,伺服器只有處理完一個請求,才會接著處理下一個請求。如果前面的處理特別慢,後面就會有許多請求排隊等著
- 新增了一些請求方法
- 新增了一些請求頭和響應頭
HTTP2.0:
- 採用二進位格式而非文本格式
- 完全多路復用,而非有序並阻塞的、只需一個連接即可實現並行
- 使用報頭壓縮,降低開銷
- 伺服器推送
參考文獻
- https://zh.wikipedia.org/wiki/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE#HTTP/1.0
- https://www.jianshu.com/p/52d86558ca57
- https://segmentfault.com/a/1190000016496448
- https://zhuanlan.zhihu.com/p/26559480