HTTP1.0、HTTP1.1、HTTP2.0的關系和區別


HTTP1.0、HTTP1.1、HTTP2.0的關系和區別

一、匯總對比

HTTP1.0

  • 無狀態、無連接

HTTP1.1

  • 持久連接
  • 請求管道化
  • 增加緩存處理(新的字段如cache-control)
  • 增加Host字段、支持斷點傳輸等(把文件分成幾部分)

HTTP2.0

  • 二進制分幀
  • 多路復用(或連接共享)
  • 頭部壓縮
  • 服務器推送

二、HTTP1.0

瀏覽器的每次請求都需要與服務器建立一個TCP連接,服務器處理完后立即斷開TCP連接(無連接),服務器不跟蹤每個客戶端也不記錄過去的請求(無狀態)。

二、HTTP1.1

HTTP/1.0中默認使用Connection:close。在HTTP/1.1中已經默認使用Connection:keep-alive,避免了連接建立和釋放地開銷,但服務器必須按照客戶端請求的先后順序依次送回相應的結果,以保證客戶端能夠區分出每次請求的響應內容。通過Content-Length字段來判斷當前請求的數據是否或已經全部接收。不允許同時存在兩個並行的響應。

二、HTTP2.0

HTTP/2引入二進制數據幀和流的概念,其中幀對數據進行順序標識,這樣瀏覽器收到數據之后,就可以按照序列對數據進行合並,而不會出現合並之后數據錯亂的情況。同樣是因為有了序列,服務器就可以並行的傳輸數據,這就是流所做的事情。

流(stream)

已建立連接上的雙向字節流

消息

與邏輯消息對應的完整的一系列數據幀

HTTP2.0通信的最小單位,每個幀包含幀頭部,至少會標識出當前幀所屬的流(stream id)

多路復用:

1、所有的HTTP2.0通信都在一個TCP連接上完成,這個連接可以承載任意數量的雙向數據流。

 

2、每個數據流以消息的形式發送,而消息由一或多個幀組成。這些幀可以亂序發送,然后再根據每個幀頭部的流標識符(stream id)重新組裝。

 

舉個例子,每個請求是一個數據流,數據流以消息的方式發送,而消息又分為多個幀,幀頭部記錄着stream id用來標識所屬的數據流,不同屬的幀可以在連接中隨機混雜在一起。接收方可以根據stream id將幀再歸屬到各自不同的請求當中去。

 

3、另外,多路復用(連接共享)可能會導致關鍵請求被阻塞。HTTP2.0里每個數據流都可以設置優先級和依賴,優先級高的數據流會被服務器優先處理和返回給客戶端,數據流還可以依賴其他的子數據流。

 

4、可見,HTTP2.0實現了真正的並行傳輸,它能夠在一個TCP上進行任意數量HTTP請求。而這個強大的功能則是基於"二進制分幀"的特性。

 

頭部壓縮:

在HTTP1.x中,頭部元數據都是以純文本的形式發送的,通常會給每個請求增加500~800字節的負荷。

 

HTTP2.0使用encoder來減少需要傳輸的header大小,通訊雙方各自cache一份header fields表,既避免了重復header的傳輸,又減小了需要傳輸的大小。高效的壓縮算法可以很大的壓縮header,減少發送包的數量從而降低延遲。

服務器推送:

服務器除了對最初請求的響應外,服務器還可以額外的向客戶端推送資源,而無需客戶端明確的請求。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM