本文從從通訊效能角度,來分析對比HTTP1.0和HTTP1.1之間的區別。以及HTTP1.1與HTTP2.0之間的區別。本文詳細內容組織如下
目錄
一丶HTTP1.0與HTTP1.1通訊效能上的區別
- 持久化連線
- 管線化技術
二丶HTTP2.0與HTTP1.1通訊效能上的區別
- 多路複用
- HTTP協議頭部壓縮
正文
一丶HTTP1.0與HTTP1.1通訊效能上的區別
-
持久化連線
HTTP1.1是預設支援持久化連線的。HTTP1.0若要支援持久化連線需要顯示指定Keep-alived報文頭。
1. 非持久化連線下HTTP協議的通訊
- 比如訪問www.taobao.com這個URL。訪問該URL時,首先會從目標伺服器上到HTML這樣的靜態資源,伺服器返回資源後會自動斷開連線,這是一次非持久的HTTP通訊過程。在該過程中包括TCP三次握手和四次揮手。
- 更進一步考慮,靜態HTML上必然包括很多圖片,js,css等資源,這些資源全部都是儲存在伺服器上。對這些資源的訪問會重複上述的HTTP通訊過程,其中又包括了TCP三次握手和四次揮手。這種反覆建立和釋放TCP連線的過程無疑浪費了伺服器很多的頻寬資源,也降低了Web頁面的載入速度。非持久化連線下HTTP協議的通訊過程如下圖所示
2. 持久化連線下HTTP協議的通訊
持久化連線很易懂。在一次HTTP通性過程後,伺服器若沒有受到顯示關閉連線的通知其不會斷開連線,而是一直保持該連線。如此一來,在訪問諸如www.taobao.com這樣的頁面時,頁面上的多數資源能夠在一條TCP連結上傳輸。這樣極大的減少了多次TCP連線,釋放帶來的效能損失。持久化連線下的通訊如下圖所示
- 管線化技術
管線化技術是在持久化連線的基礎上,進一步對通訊效能的提升。在持久化連線下,請求和相應是順次進行的。上次請求得到響應後,才能傳送下次請求。管線化技術就是指能在未收到響應時,順次傳送多個響應。
二丶HTTP2.0與HTTP1.1之間通訊效能對比
-
多路複用技術
多路複用技術建立在持久連線的基礎上,允許所有請求公用同一連線,並且能夠並行傳輸。此處的多路複用技術和管線化技術值不同之處在於:。
- 管線化技術中所有,請求是順次傳送出去的。而多路複用中,所有請求是並行傳送出去的。
-
報文頭壓縮
報文頭壓縮同樣比較容易理解,減小HTTP報文中頭部欄位的開銷,提供通訊效率。採用報文頭壓縮主要是兩個原因:
(1)對於單個HTTP報文而言,當攜帶較少的通訊資料時,報文頭部大小將遠遠大於有效的通訊資料,導致頻寬利用率較低。
(2)在持久化連線下,傳送的多個HTTP報文之間,經常存在重複報文頭欄位在傳輸。
HTTP2.0提出的報文頭壓縮演算法針對上述兩點均做了優化:
-
基於靜態字典壓縮 在HTTP協議中的客戶端以及服務端之間,共同維護了一份靜態字典。該靜態字典中儲存了大量常見的HTTP報文頭欄位。比如下述,靜態字典:
靜態字典中,保留了兩種情況:- 完整的報文頭以及欄位值,比如Content-Language:zh-CN。
- 完整報文頭,比如User-agent。
在靜態字典的基礎上,可以利用靜態字典中的索引號代替HTTP中的報文頭,一般來說一個位元組就足以覆蓋靜態字典中的所有索引號了。如下圖所示,利用一個位元組格式,來代替HTTP報文頭,index是靜態字典中的索引號。
-
基於動態字典壓縮
靜態字典並不能夠涵蓋HTTP頭部鍵值對所有的組合情況,為此在靜態字典壓縮的基礎上補充了動態字典壓縮。
動態字典壓縮過程比較簡單。如果遇見在靜態字典中不存在的HTTP頭部欄位,那麼此處採用非壓縮傳輸,接著把該頭部欄位新增到動態欄位中。當下次傳送同樣的頭部欄位時,則可以依據動態字典的內容對該頭部欄位進行壓縮了。
- 當通訊過程越長導致動態字典積累的內容將越多,因此HTTP頭部壓縮的效果越佳
- 動態字典的內容會在連線新建立的時候重置。
-