Http2
HTTP/2 的請求行是什麼?
對於 HTTP/0.9:
GET /
對於 HTTP/1.0:
GET / HTTP/1.0
對於 HTTP/1.1:
GET / HTTP/1.1 Host: example.com
HTTP/2 的請求行是什麼?是不是像:
GET / HTTP/2.0
還是 HTTP/2?
兩者都不; 沒有這樣的請求行,因為 HTTP/2(RFC 7540)不使用行,而是使用幀(第 4 節)進行通信。在這些幀中,使用 HTTP 標頭欄位(第 8.1.2 節)交換標頭。
客戶端首先要知道伺服器是否支持 HTTP/2。
- 對於 HTTP(第 3.2 節),這是通過
Upgrade: h2c
標頭完成的:> GET / HTTP/1.1 > Host: server.example.com > Connection: Upgrade, HTTP2-Settings > Upgrade: h2c > HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload> > < HTTP/1.1 101 Switching Protocols < Connection: Upgrade < Upgrade: h2c < [ HTTP/2 connection ...
- 對於 HTTPS(第 3.3 節),使用TLS-ALPN(RFC 7301 )中的
h2
協議標識符。- 由於先驗知識(第 3.4 節),請立即從 HTTP/2連接前言開始。
現在,HTTP/2 客戶端連接前言(第 3.5 節)可能是您正在尋找的等價物,因為通信總是以 24 個八位字節的序列開始:
0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a
IE
PRI *m HTTP/2.0\r\n\r\nSM\r\n\r\n
之後,使用頭壓縮(第 4.3 節)在幀中交換頭欄位:
標題列表是零個或多個標題欄位的集合。通過連接傳輸時,使用 HTTP 標頭壓縮 [ COMPRESSION ] 將標頭列表序列化為標頭塊。然後將序列化的標頭塊劃分為一個或多個八位字節序列,稱為標頭塊片段,並在
HEADERS
(第 6.2 節)、PUSH_PROMISE
(第 6.6 節)或CONTINUATION
(第 6.10 節)幀的有效負載內傳輸。幾個 HTTP/1.1 請求和響應的 HTTP/2 等效項在第 8.1.3 節的範例中進行了說明,例如
GET /resource HTTP/1.1 HEADERS Host: example.org ==> + END_STREAM Accept: image/jpeg + END_HEADERS :method = GET :scheme = https :path = /resource host = example.org accept = image/jpeg