http 進化

參考原文: https://www.cnblogs.com/heluan/p/8620312.html

HTTP優化有兩個方面帶寬延遲

帶寬的影響只停留在撥號時代

延遲影響

1.瀏覽器的阻塞: 瀏覽器最大連接數量4 (不同瀏覽器不同)

2.DNS查詢,通過緩存來縮短時間。

3.建立連接:HTTP 是基於 TCP 協議的,瀏覽器最快也要在第三次握手時才能捎帶 HTTP 請求報文,達到真正的建立連接,但是這些連接無法複用會導致每次請求都經歷三次握手和慢啓動。三次握手在高延遲的場景下影響較明顯,慢啓動則對文件類大請求影響較大。

 

HTTP2.0的多路複用和HTTP1.X中的長連接複用有什麼區別?

  • HTTP/1.* 一次請求-響應,建立一個連接,用完關閉;每一個請求都要建立一個連接;

  • HTTP/1.1 Pipeling解決方式爲,若干個請求排隊串行化單線程處理,後面的請求等待前面請求的返回才能獲得執行機會,一旦有某請求超時等,後續請求只能被阻塞,毫無辦法,也就是人們常說的線頭阻塞;

  • HTTP/2多個請求可同時在一個連接上並行執行。某個請求任務耗時嚴重,不會影響到其它連接的正常執行;
    具體如圖:

     

 

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

  • 普通的客戶端請求過程:

 

  • 服務端推送的過程:

 

HTTP2.0和HTTP1.X相比的新特性

  • 新的二進制格式(Binary Format),HTTP1.x的解析是基於文本。基於文本協議的格式解析存在天然缺陷,文本的表現形式有多樣性,要做到健壯性考慮的場景必然很多,二進制則不同,只認0和1的組合。基於這種考慮HTTP2.0的協議解析決定採用二進制格式,實現方便且健壯。

  • 多路複用(MultiPlexing),即連接共享,即每一個request都是是用作連接共享機制的。一個request對應一個id,這樣一個連接上可以有多個request,每個連接的request可以隨機的混雜在一起,接收方可以根據request的 id將request再歸屬到各自不同的服務端請求裏面。

  • header壓縮,如上文中所言,對前面提到過HTTP1.x的header帶有大量信息,而且每次都要重複發送,HTTP2.0使用encoder來減少需要傳輸的header大小,通訊雙方各自cache一份header fields表,既避免了重複header的傳輸,又減小了需要傳輸的大小。

  • 服務端推送(server push),同SPDY一樣,HTTP2.0也具有server push功能。

簡單總結: http1.0 單請求用單鏈接,http1.x 多請求用一個鏈接,但互相阻塞。http2.0 多請求用一個鏈接,併發。

 

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