Http2

HTTP/2 的請求行是什麼?

  • April 14, 2021

對於 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 ...

現在,HTTP/2 客戶端連接前言第 3.5 節)可能是您正在尋找的等價物,因為通信總是以 24 個八位字節的序列開始:

  • 0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a

IEPRI *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

引用自:https://serverfault.com/questions/1060286