[筆記]HTTP/1 HTTP/2的比較

相關的文章多是英文,少數的幾篇中文文章讓我懷疑我是不是該重學中文...

整理一下網路上查到的一些資料。(複製貼上居多)

 

透過chrome的開發者工具,在network tab勾選Protocol可以查看請求是使用哪種協定。

 

這篇只純粹簡單整理HTTP/2相較於HTTP/1的幾個優點。

 

1. 與 HTTP/1.x 的許多標準相容
 Ex. methods, status codes, URIs and header fields
 

2. Multiplexing(多路複用/複用/多工)
 在HTTP/1.1 協議中,client在同一時間,針對同一域名下的請求有限制,當一個 request 下載的內容過大時,會阻塞其他 request 。

 而 HTTP/2允許 client 透過同一個 TCP connection 同步發送多個 requests 給 server,server 也允許 client 從同一個 TCP connection 異步下載檔案,進而減少額外的往返時間(RTT, round trip time)。

 

3. Header Compression
 HTTP/1 由於資安問題,禁用Header Compression。
 HTTP/2 利用 HPACK 進行壓縮(已知可大幅降低資安犯罪機會),將大量重複的 Header key:value 壓縮成 1 ~ 2 bytes,節省流量。

 HPACK基本原理
 使用靜態索引表和動態索引表來把頭部映射到索引值(key:value),並對沒找到的頭部使用huffman 編碼,並動態緩存到索引,從而達到壓縮頭部的效果。

 

4. Binary Protocol 二進位協定
 HTTP/2 在傳輸時是 Binary 。
 HTTP/1.1,使用 Text Protocol,為了正確處理純文字的 parsing(換行、空行、空白等等都是需要特別處理),定義了四種方法,而在 HTTP/2 中只需要一種處理方式。

 

5. HTTP/2 Server Push
 傳統 HTTP/1.x ,server 要等到 client 的 request 才會做出 response。
 而 Server Push 允許 server 在 client 提出後續請求之前,主動將這些已知會被接著請求的檔案推送給 client。
 這樣的功能減少解析數據(request)的開銷,並且降低網路的延遲。
 
 

參考文章

HTTP/2 相比1.0 有哪些重大改進?

什麼是 HTTP/2?

HTTP/2: the difference between HTTP/1.1, benefits and how to use it
 

HPACK 完全解析

HPACK:潜伏在HTTP/2身后的杀手

HPACK: HTTP/2’s Hidden Gem