【问题标题】:Understanding the value of the header HTTP2-Settings used for http/2 requests and upgrade了解用于 http/2 请求和升级的标头 HTTP2-Settings 的值
【发布时间】:2015-08-04 17:07:04
【问题描述】:

我正在编写一个简单的应用程序来确定某些网站是否支持 http/2。

根据我在草稿中读到的内容:

https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-http2-07#section-3.2

我应该能够做一个获取请求,例如

GET / HTTP/1.1
Host: server.example.com
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>

然后如果他们支持 http/2 响应应该是这样的:

 HTTP/1.1 101 Switching Protocols
 Connection: Upgrade
 Upgrade: HTTP/2.0

 [ HTTP/2.0 connection ...

我正试图准确了解 HTTP2-Settings 请求标头的值。

我希望有人能解释一下示例中应该包含哪些信息。

【问题讨论】:

    标签: http protocols spdy http2


    【解决方案1】:

    HTTP/2 已达到official standard 的状态。

    使用明文升级机制来确定网站是否支持 HTTP/2 的运气将非常有限。

    原因是浏览器不支持这种升级到 HTTP/2 的方式(它们都更喜欢使用 ALPN 而不是 TLS),因此两个服务器都不支持。

    [免责声明,我是 Jetty 提交者和 Jetty HTTP/2 实现者]。 例如,Jetty 确实支持这种升级方式(甚至直接 HTTP/2),例如参见 these tests,但由于上述原因,我们不将其部署在我们自己的网站 https://webtide.com 上。

    您不需要在此升级 SETTINGS 框架中发送任何内容,如果您想在服务器有机会向您回复 HTTP/2 之前配置服务器,您只想发送它,但通常默认值是可以的.

    请记住,作为连接前言的一部分,客户端必须发送另一个 SETTINGS 帧,该帧也可以为空或包含配置参数。通常,Jetty HTTP2Client 等 HTTP/2 客户端 API 将允许您轻松配置作为前言一部分的 SETTINGS 框架,因为它将用于升级机制和 ALPN 机制。

    HTTP2-Settings 标头的最小有效值是空字符串:

    GET / HTTP/1.1
    Host: host
    Connection: Upgrade, HTTP2-Settings
    Upgrade: h2c
    HTTP2-Settings:
    User-Agent: whatever
    

    否则您需要创建一个 SETTINGS 帧有效负载(仅定义 here 的字节,因此没有定义 here 的 9 字节帧头),然后使用 base64 将这些字节转换为定义here

    为了您的测试,一个空的HTTP2-Settings 标头就可以了,但正如我所说,您肯定不会检测网站是否支持 HTTP/2:您的升级将失败,但该网站很可能通过 ALPN 支持 HTTP/2 over TLS。

    【讨论】:

      【解决方案2】:

      此站点http://nghttp2.org/ 接受未加密的 HTTP2 (h2c) 连接,这样做:

      GET / HTTP/1.1
      Host: nghttp2.org
      Connection: Upgrade, HTTP2-Settings
      Upgrade: h2c
      HTTP2-Settings:
      User-Agent: whatever
      

      正如 sbordet 所建议的,确实会从服务器产生“101 Switching Protocols”响应。

      【讨论】:

        猜你喜欢
        • 2019-05-17
        • 2014-06-24
        • 1970-01-01
        • 2016-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-03
        • 2017-10-07
        相关资源
        最近更新 更多