1. 程式人生 > 其它 >HTTP1.0/1.1/2.0的區別

HTTP1.0/1.1/2.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,減少傳送包的數量從而降低延遲。

伺服器推送:

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

宣告 歡迎轉載,但請保留文章原始出處:) 部落格園:https://www.cnblogs.com/chenxiaomeng/ 如出現轉載未宣告 將追究法律責任~謝謝合作