HTTP/2 的请求行是什么?

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?

答案1

都不是;没有这样的请求行,因为 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 节),h2 协议标识符在 TLS-ALPN 中(RFC 7301) 用来。

  • 立即开始使用 HTTP/2连接前言, 因为先前知识第 3.4 节)。

现在HTTP/2 客户端连接前言第 3.5 节)可能是您正在寻找的等效项,因为通信总是以 24 个八位字节的序列开头:

  • 0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a

    IEPRI *m HTTP/2.0\r\n\r\nSM\r\n\r\n

之后,使用以下方式在帧中交换标头字段:报头压缩第4.3节):

标头列表是零个或多个标头字段的集合。在通过连接传输时,标头列表使用 HTTP 标头压缩序列化为标头块 [压缩],然后将序列化的报头块分成一个或多个八位字节序列(称为报头块片段),并在有效载荷内传输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

相关内容