HTTP2與HTTP3新特性一覽
HTTP2協議分析
- HTTP2 沒有改動 HTTP 的應用語義。 HTTP 方法、狀態代碼、URI 和標 頭字段等核心概念一如往常。
- HTTP2 修改了數據格式化(分幀)以及在客戶端與服務器間傳輸的方 式。這兩點統帥全局,經過新的分幀層向咱們的應用隱藏了全部複雜性。
- 因爲HTTP2 引入了一個新的二進制分幀層,該層沒法與以前的 HTTP 1.x 服務器和客戶端向後兼容,所以協議的主版本提高到 HTTP2。
-
HTTP2的特色:
- 使用二進制格式傳輸,更高效、更緊湊。
- 對報頭壓縮,下降開銷。
- 多路複用,一個網絡鏈接實現並行請求。
- 服務器主動推送,減小請求的延遲。
- 默認使用加密。
HTTP 2:二進制分幀層
- HTTP2 全部性能加強的核心在於新的二進制分幀 層,它定義瞭如何封裝 HTTP 消息並在客戶端與服 務器之間傳輸。
- 這裏所謂的「層」指的是位於套接字接口與應用可見 的高級 HTTP API 之間一個通過優化的新編碼機制。
- HTTP1.x 協議以換行符做爲純文本的分隔符,而 HTTP2 將全部傳輸的信息分割爲更小的消息和 幀,並採用二進制格式對它們編碼。
- 客戶端和服務器會替咱們完成必要的分幀工做。
HTTP 2:多路複用
- 在 HTTP 1.x 中,若是客戶端要想發起多個並行請求以提高性能,則必須使 用多個 TCP 鏈接。這種模型也會致使隊首阻塞,從而形成底層 TCP 鏈接的效率低下。
- 將 HTTP 消息分解爲獨立的幀,交錯發送,而後在另外一端從新組裝是 HTTP 2 最重要的一項加強。這個機制會在整個網絡技術棧中引起一系列連鎖反 應,從而帶來巨大的性能提高。
- 並行交錯地發送多個請求,請求之間互不影響。
- 並行交錯地發送多個響應,響應之間互不干擾。
- 使用一個鏈接並行發送多個請求和響應。
- 沒必要再爲繞過 HTTP 1.x 限制而作不少工做
- 消除沒必要要的延遲和提升現有網絡容量的利用率,從而減小頁面加載時間。
http2.akamai.com/demo緩存
HTTP 2:服務器推送
- HTTP 2 新增的另外一個強大的新功能是,服務器能夠對一個客戶端請求發送多個響 應。 換句話說,除了對最初請求的響應外,服務器還能夠向客戶端推送額外資源,而無需客戶端明確地請求。
- HTTP 2 打破了嚴格的請求-響應語義,支持一對多和服務器發起的推送工做流
- 服務器已經知道客戶端下一步要請求什麼資源,這時候服務器推送便可派上用場。
- 推送資源能夠進行如下處理:
- 由客戶端緩存
- 在不一樣頁面之間重用
- 與其餘資源一塊兒複用
- 由服務器設定優先級
- 被客戶端拒絕
HTTP2的僞頭字段
- 僞頭部字段是http2內置的幾個特殊的以」:」開始的 key,用於替代HTTP/1.x中請求行/響應行中的信 息,好比請求方法,響應狀態碼等
- :method 目標URL模式部分(請求)
- :scheme 目標URL模式部分(請求)
- :authority 目標RUL認證部分(請求)
- :path 目標URL的路徑和查詢部分(絕對路徑 產生式和一個跟着"?"字符的查詢產生式)。 (請求)
- :status 響應頭中的HTTP狀態碼部分(響應)
瞭解HTTP 3
- 運行在 QUIC 之上的 HTTP 協議被稱爲 HTTP/3(HTTP-over-QUIC)
- QUIC 協議(Quick UDP Internet Connection)基於 UDP,正是看中了 UDP 的速度與效率。同時 QUIC 也整合了 TCP、TLS 和 HTTP/2 的優 點,並加以優化。
- 特色:
- 減小了握手的延遲(1-RTT 或 0-RTT)
- 多路複用,而且沒有 TCP 的阻塞問題
- 鏈接遷移,(主要是在客戶端)當由 Wifi 轉移到 4G 時,鏈接不 會被斷開。
隊首阻塞問題
- 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 解決隊頭阻塞問題的的方法:
- QUIC 的傳輸單元是 Packet,加密單元也是 Packet,整個加密、 傳輸、解密都基於 Packet,這樣就能避免 TLS 的隊頭阻塞問題;
- QUIC 基於 UDP,UDP 的數據包在接收端沒有處理順序,即便中間 丟失一個包,也不會阻塞整條鏈接,其餘的資源會被正常處理。
歡迎關注本站公眾號,獲取更多信息