HTTP2與HTTP3新特性一覽

HTTP2協議分析

  • HTTP2 沒有改動 HTTP 的應用語義。 HTTP 方法、狀態代碼、URI 和標 頭字段等核心概念一如往常。
  • HTTP2 修改了數據格式化(分幀)以及在客戶端與服務器間傳輸的方 式。這兩點統帥全局,經過新的分幀層向咱們的應用隱藏了全部複雜性。
  • 因爲HTTP2 引入了一個新的二進制分幀層,該層沒法與以前的 HTTP 1.x 服務器和客戶端向後兼容,所以協議的主版本提高到 HTTP2。
  • HTTP2的特色:

  1. 使用二進制格式傳輸,更高效、更緊湊。
  2. 對報頭壓縮,下降開銷。
  3. 多路複用,一個網絡鏈接實現並行請求。
  4. 服務器主動推送,減小請求的延遲。
  5. 默認使用加密。

HTTP 2:二進制分幀層

  • HTTP2 全部性能加強的核心在於新的二進制分幀 層,它定義瞭如何封裝 HTTP 消息並在客戶端與服 務器之間傳輸。
  • 這裏所謂的「層」指的是位於套接字接口與應用可見 的高級 HTTP API 之間一個通過優化的新編碼機制。
  • HTTP1.x 協議以換行符做爲純文本的分隔符,而 HTTP2 將全部傳輸的信息分割爲更小的消息和 幀,並採用二進制格式對它們編碼。
  • 客戶端和服務器會替咱們完成必要的分幀工做。

HTTP 2:多路複用

  • 在 HTTP 1.x 中,若是客戶端要想發起多個並行請求以提高性能,則必須使 用多個 TCP 鏈接。這種模型也會致使隊首阻塞,從而形成底層 TCP 鏈接的效率低下。
  • 將 HTTP 消息分解爲獨立的幀,交錯發送,而後在另外一端從新組裝是 HTTP 2 最重要的一項加強。這個機制會在整個網絡技術棧中引起一系列連鎖反 應,從而帶來巨大的性能提高。
  1. 並行交錯地發送多個請求,請求之間互不影響。
  2. 並行交錯地發送多個響應,響應之間互不干擾。
  3. 使用一個鏈接並行發送多個請求和響應。
  4. 沒必要再爲繞過 HTTP 1.x 限制而作不少工做
  5. 消除沒必要要的延遲和提升現有網絡容量的利用率,從而減小頁面加載時間。

http2.akamai.com/demo緩存

HTTP 2:服務器推送

  • HTTP 2 新增的另外一個強大的新功能是,服務器能夠對一個客戶端請求發送多個響 應。 換句話說,除了對最初請求的響應外,服務器還能夠向客戶端推送額外資源,而無需客戶端明確地請求。
  • HTTP 2 打破了嚴格的請求-響應語義,支持一對多和服務器發起的推送工做流
  • 服務器已經知道客戶端下一步要請求什麼資源,這時候服務器推送便可派上用場。
  • 推送資源能夠進行如下處理:
  1. 由客戶端緩存
  2. 在不一樣頁面之間重用
  3. 與其餘資源一塊兒複用
  4. 由服務器設定優先級
  5. 被客戶端拒絕

HTTP2的僞頭字段

  • 僞頭部字段是http2內置的幾個特殊的以」:」開始的 key,用於替代HTTP/1.x中請求行/響應行中的信 息,好比請求方法,響應狀態碼等
  1. :method 目標URL模式部分(請求)
  2. :scheme 目標URL模式部分(請求)
  3. :authority 目標RUL認證部分(請求)
  4. :path 目標URL的路徑和查詢部分(絕對路徑 產生式和一個跟着"?"字符的查詢產生式)。 (請求)
  5. :status 響應頭中的HTTP狀態碼部分(響應)

瞭解HTTP 3

  • 運行在 QUIC 之上的 HTTP 協議被稱爲 HTTP/3(HTTP-over-QUIC)
  • QUIC 協議(Quick UDP Internet Connection)基於 UDP,正是看中了 UDP 的速度與效率。同時 QUIC 也整合了 TCP、TLS 和 HTTP/2 的優 點,並加以優化。
  • 特色:
  1. 減小了握手的延遲(1-RTT 或 0-RTT)
  2. 多路複用,而且沒有 TCP 的阻塞問題
  3. 鏈接遷移,(主要是在客戶端)當由 Wifi 轉移到 4G 時,鏈接不 會被斷開。
  • HTTP 3與HTTP 1.1和HTTP 2沒有直接的關係,也不是http2的擴展
  • HTTP 3將會是一個全新的WEB協議
  • HTTP 3目前處於制訂和測試階段
  • www.chromium.org/quic

隊首阻塞問題

  • HTTP/1.1 和 HTTP/2 都存在隊頭阻塞問題(Head of line blocking)
  • HTTP/1.1 的隊頭阻塞。一個 TCP 鏈接同時傳輸 10 個請求,其中第 一、二、3 個請求已被客戶端接收,但第 4 個請求丟失,那麼後面第 5 - 10 個請求都被阻塞,須要等第 4 個請求處理完畢才能被處理,這樣 就浪費了帶寬資源。
  • HTTP/2 的多路複用雖然能夠解決「請求」這個粒度的阻塞,但 HTTP/2 的基礎 TCP 協議自己卻也存在着隊頭阻塞的問題。
  • 因爲 HTTP/2 必須使用 HTTPS,而 HTTPS 使用的 TLS 協議也存在隊 頭阻塞問題。
  • 隊頭阻塞會致使 HTTP/2 在更容易丟包的弱網絡環境下比 HTTP/1.1 更慢。
  • 那 QUIC 解決隊頭阻塞問題的的方法:
  1. QUIC 的傳輸單元是 Packet,加密單元也是 Packet,整個加密、 傳輸、解密都基於 Packet,這樣就能避免 TLS 的隊頭阻塞問題;
  2. QUIC 基於 UDP,UDP 的數據包在接收端沒有處理順序,即便中間 丟失一個包,也不會阻塞整條鏈接,其餘的資源會被正常處理。
相關文章
相關標籤/搜索