http2的多路復用筆記

學習筆記

HTTP2采用二進制格式傳輸,取代了HTTP1.x的文本格式,二進制格式解析更高效。
多路復用代替了HTTP1.x的序列和阻塞機制,所有的相同域名請求都通過同一個TCP連接并發(fā)完成。在HTTP1.x中,并發(fā)多個請求需要多個TCP連接,瀏覽器為了控制資源會有6-8個TCP連接都限制。
HTTP2中

  • 同域名下所有通信都在單個連接上完成,消除了因多個 TCP 連接而帶來的延時和內(nèi)存消耗。
  • 單個連接上可以并行交錯的請求和響應,之間互不干擾

在 HTTP/1 中,每次請求都會建立一次HTTP連接,也就是我們常說的3次握手4次揮手,這個過程在一次請求過程中占用了相當長的時間,即使開啟了 Keep-Alive ,解決了多次連接的問題,但是依然有兩個效率上的問題:

  • 第一個:串行的文件傳輸。當請求a文件時,b文件只能等待,等待a連接到服務器、服務器處理文件、服務器返回文件,這三個步驟。我們假設這三步用時都是1秒,那么a文件用時為3秒,b文件傳輸完成用時為6秒,依此類推。(注:此項計算有一個前提條件,就是瀏覽器和服務器是單通道傳輸)
  • 第二個:連接數(shù)過多。我們假設Apache設置了最大并發(fā)數(shù)為300,因為瀏覽器限制,瀏覽器發(fā)起的最大請求數(shù)為6,也就是服務器能承載的最高并發(fā)為50,當?shù)?1個人訪問時,就需要等待前面某個請求處理完成。

HTTP/2的多路復用就是為了解決上述的兩個性能問題。
在 HTTP/2 中,有兩個非常重要的概念,分別是幀(frame)和流(stream)。
幀代表著最小的數(shù)據(jù)單位,每個幀會標識出該幀屬于哪個流,流也就是多個幀組成的數(shù)據(jù)流。
多路復用,就是在一個 TCP 連接中可以存在多條流。換句話說,也就是可以發(fā)送多個請求,對端可以通過幀中的標識知道屬于哪個請求。通過這個技術(shù),可以避免 HTTP 舊版本中的隊頭阻塞問題,極大的提高傳輸性能。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容