http1 和 http2 的區別

2021-10-19 21:51:54 字數 1124 閱讀 7313

網路延遲問題主要由於隊頭阻塞(head-of-line blocking),導致頻寬無法被充分利用。

隊頭阻塞是指當順序傳送的請求序列中的乙個請求因為某種原因被阻塞時,在後面排隊的所有請求也一併被阻塞,會導致客戶端遲遲收不到資料。

由於報文header一般會攜帶"user agent""cookie""accept""server"等許多固定的頭字段(如下圖),多達幾百位元組甚至上千位元組,但body卻經常只有幾十位元組(比如get請求、

204/301/304響應),成了不折不扣的「大頭兒子」。header裡攜帶的內容過大,在一定程度上增加了傳輸的成本。更要命的是,成千上萬的請求響應報文裡有很多字段值都是重複的,非常浪費。

http/1.1在傳輸資料時,所有傳輸的內容都是明文,客戶端和伺服器端都無法驗證對方的身份,這在一定程度上無法保證資料的安全性。

http/2傳輸資料量的大幅減少,主要有兩個原因:以二進位制方式傳輸和header 壓縮。我們先來介紹二進位制傳輸,http/2 採用二進位制格式傳輸資料,而非http/1.x 裡純文字形式的報文 ,二進位制協議解析起來更高效。http/2 將請求和響應資料分割為更小的幀,並且它們採用二進位制編碼

http/2並沒有使用傳統的壓縮演算法,而是開發了專門的"hpack」演算法,在客戶端和伺服器兩端建立「字典」,用索引號表示重複的字串,還採用哈夫曼編碼來壓縮整數和字串,可以達到50%~90%的高壓縮率。

在 http/2 中引入了多路復用的技術。多路復用很好的解決了瀏覽器限制同乙個網域名稱下的請求數量的問題,同時也接更容易實現全速傳輸,畢竟新開乙個 tcp 連線都需要慢慢提公升傳輸速度。

http2還在一定程度上改變了傳統的「請求-應答」工作模式,伺服器不再是完全被動地響應請求,也可以新建「流」主動向客戶端傳送訊息。比如,在瀏覽器剛請求html的時候就提前把可能會用到的js、css檔案發給客戶端,減少等待的延遲,這被稱為"伺服器推送"( server push,也叫 cache push)

出於相容的考慮,http/2延續了http/1的「明文」特點,可以像以前一樣使用明文傳輸資料,不強制使用加密通訊,不過格式還是二進位制,只是不需要解密。

HTTP1和HTTP2的區別

缺陷 執行緒阻塞,在同一時間,同一網域名稱的請求有一定數量限制,超過限制數目的請求會被阻塞。2.http1.0 短連線 缺陷 瀏覽器與伺服器只保持短暫的連線,瀏覽器的每次請求都需要與伺服器建立乙個tcp連線 tcp連線的新建成本很高,因為需要客戶端和伺服器三次握手 伺服器完成請求處理後立即斷開tcp...

總結筆記Http 1

1.建立在tcp上的無狀態連線 2.客戶端發請求,服務端響應客戶端.整個過程叫 事務 事務結束,服務端會新增一條日誌 http請求 1.狀態行 請求方式method 資源路徑url 協議版本version 2.請求頭 訪問的網域名稱 使用者 cookie等資訊等 3.請求正文 http請求的資料。h...

HTTP1 1優化和HTTP2的優化

通過管道技術,在乙個tcp連線中,傳送多個http請求,不需要等待伺服器端對前乙個請求的響應之後,再傳送下乙個請求,但是伺服器端在響應時,要嚴格按照接收請求的順序傳送,即先接收到的請求,需要先傳送其響應,客戶端瀏覽器也是如此,接收響應的順序要按照自己傳送請求的順序來。隊首阻塞問題 如果前面收到的乙個...