HTTP/2
- 多路復用 (Multiplexing)
多路復用允許同時通過單一的 HTTP/2 連接發起多重的請求-響應消息
HTTP1.1
在HTTP/1.1協議中,瀏覽器客戶端在同一時間,針對同一域名下的請求有一定數量限制,超過限制數目的請求會被阻塞。
HTTP2.0的多路復用和HTTP1.X中的長連接復用有什么區別?
-
HTTP/1.* 一次請求-響應,建立一個連接,用完關閉;每一個請求都要建立一個連接;
-
HTTP/1.1 Pipeling解決方式為,若干個請求排隊串行化單線程處理,后面的請求等待前面請求的返回才能獲得執行機會,一旦有某請求超時等,后續請求只能被阻塞,毫無辦法,也就是人們常說的線頭阻塞;
-
HTTP/2多個請求可同時在一個連接上並行執行。某個請求任務耗時嚴重,不會影響到其它連接的正常執行;具體如圖:
服務器推送到底是什么?服務端推送能把客戶端所需要的資源伴隨着index.html一起發送到客戶端,省去了客戶端重復請求的步驟。正因為沒有發起請求,建立連接等操作,所以靜態資源通過服務端推送的方式可以極大地提升速度。具體如下:
-
普通的客戶端請求過程:
服務端推送的過程:
為什么需要頭部壓縮?假定一個頁面有100個資源需要加載(這個數量對於今天的Web而言還是挺保守的), 而每一次請求都有1kb的消息頭(這同樣也並不少見,因為Cookie和引用等東西的存在), 則至少需要多消耗100kb來獲取這些消息頭。HTTP2.0可以維護一個字典,差量更新HTTP頭部,大大降低因頭部傳輸產生的流量。具體參考:HTTP/2 頭部壓縮技術介紹
HTTP2.0多路復用有多好?HTTP 性能優化的關鍵並不在於高帶寬,而是低延遲。TCP 連接會隨着時間進行自我「調諧」,起初會限制連接的最大速度,如果數據成功傳輸,會隨着時間的推移提高傳輸的速度。這種調諧則被稱為 TCP 慢啟動。由於這種原因,讓原本就具有突發性和短時性的 HTTP 連接變的十分低效。HTTP/2 通過讓所有數據流共用同一個連接,可以更有效地使用 TCP 連接,讓高帶寬也能真正的服務於 HTTP 的性能提升。
參考鏈接:
https://juejin.im/entry/5981c5df518825359a2b9476
https://www.zhihu.com/question/34074946