HTTP2.0特性總結

 

回顧 HTTP1.1:

1、長連接

Http1.1支持長連接(PersistentConnection)和請求的流水線(Pipelining)處理,在一個TCP連接上可以傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗和延遲,在HTTP1.1中默認開啓Connection: keep-alive,一定程度上彌補了HTTP1.0每次請求都要創建連接的缺點。

2、緩存處理

引入了更多的緩存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的緩存頭來控制緩存策略。

3、帶寬優化及網絡連接的使用
在請求頭引入了range頭域,它允許只請求資源的某個部分,即返回碼是206(Partial Content),這樣就方便了開發者自由的選擇以便於充分利用帶寬和連接。
4、錯誤通知的管理
新增了24個錯誤狀態響應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生衝突;410(Gone)表示服務器上的某個資源被永久性的刪除。

5、Host頭處理
Http1.1的請求消息和響應消息都應支持Host頭域,且請求消息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)。


HTTP2.0特性

1、完全採用二進制格式

HTTP2.0主要改動HTTP2.0作爲新版協議,改動細節必然很多,不過對應用開發者和服務提供商來說,影響較大的就幾點。
新的二進制格式(Binary Format)http1.x誕生的時候是明文協議,其格式由三部分組成:start line(request line或者status line),header,body。要識別這3部分就要做協議解析,http1.x的解析是基於文本。基於文本協議的格式解析存在天然缺陷,文本的表現形式有多樣性,要做到健壯性考慮的場景必然很多,二進制則不同,只認0和1的組合。基於這種考慮http2.0的協議解析決定採用二進制格式,實現方便且健壯。
有人可能會覺得基於文本的http調試方便很多,像firebug,chrome,charles等不少工具都可以即時調試修改請求。實際上現在很多請求都是走https了,要調試https請求必須有私鑰才行。http2.0的絕大部分request應該都是走https,所以調試方便無法作爲一個有力的考慮因素了。curl,tcpdump,wireshark這些工具會更適合http2.0的調試。
http2.0用binary格式定義了一個一個的frame,和http1.x的格式對比如下圖:

 

2、多路複用
根據request的 id將request再歸屬到各自不同的服務端請求裏面,即單個連接上同時進行多個業務單元數據的傳輸。
3、頭部壓縮

假定一個頁面有100個資源需要加載(這個數量對於今天的Web而言還是挺保守的), 而每一次請求都有1kb的消息頭(這同樣也並不少見,因爲Cookie和引用等東西的存在), 則至少需要多消耗100kb來獲取這些消息頭。HTTP2.0可以維護一個字典,差量更新HTTP頭部,大大降低因頭部傳輸產生的流量。
使用encoder來減少需要傳輸的header大小,通訊雙方各自cache一份header fields表,既避免了重複header的傳輸,又減小了需要傳輸的大小。

HTTP1.X的頭部越來越膨脹,很多都是重複且多餘的,HTTP2.0可以壓縮頭部的大小,並且避免了重複的傳輸,可以大大降低延遲。

4、服務端推送

服務端推送能把客戶端所需要的資源伴隨着index.html一起發送到客戶端,省去了客戶端重複請求的步驟。正因爲沒有發起請求,建立連接等操作,所以靜態資源通過服務端推送的方式可以極大地提升速度。

5、請求優先級

 


HTTP2.0的多路複用解決了HTTP1.X中的長連接複用的什麼痛點?
HTTP/1.* 一次請求-響應,建立一個連接,用完關閉;每一個請求都要建立一個連接;
HTTP/1.1 Pipeling解決方式爲,若干個請求排隊串行化單線程處理,後面的請求等待前面請求的返回才能獲得執行機會,一旦有某請求超時等,後續請求只能被阻塞,毫無辦法,也就是人們常說的線頭阻塞;

也就是說,HTTP1.1儘管減少了TCP連接的消耗,但是本身仍然是串行執行。
HTTP2.0多個請求可同時在一個連接上並行執行。某個請求任務耗時嚴重,不會影響到其它連接的正常執行;
 

補充:HTTP2.0多路複用優勢
HTTP性能優化的關鍵並不在於高帶寬,而是低延遲。TCP 連接會隨着時間進行自我「調諧」,起初會限制連接的最大速度,如果數據成功傳輸,會隨着時間的推移提高傳輸的速度。這種調諧則被稱爲 TCP 慢啓動。由於這種原因,讓原本就具有突發性和短時性的 HTTP 連接變的十分低效。
HTTP/2 通過讓所有數據流共用同一個連接,可以更有效地使用 TCP 連接,讓高帶寬也能真正的服務於 HTTP 的性能提升。
 

 

 

 

發佈了145 篇原創文章 · 獲贊 109 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章