了解用于http/2请求和升级的头HTTP2设置的值

了解用于http/2请求和升级的头HTTP2设置的值,http,protocols,spdy,http2,Http,Protocols,Spdy,Http2,我正在编写一个简单的应用程序来确定某些网站是否支持http/2 根据我在草稿中读到的内容: 我应该能够执行get请求,例如 GET / HTTP/1.1 Host: server.example.com Connection: Upgrade, HTTP2-Settings Upgrade: h2c HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload> 我试图准确地理解HTTP2设置请求头的值应该是多少 我

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

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

我应该能够执行get请求,例如

GET / HTTP/1.1
Host: server.example.com
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>
我试图准确地理解
HTTP2设置
请求头的值应该是多少


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

HTTP/2已达到的状态

通过使用明文升级机制,您将很难确定网站是否支持HTTP/2

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

[免责声明,我是Jetty提交者和Jetty HTTP/2实现者]。 例如,Jetty确实支持这种类型的升级(甚至直接HTTP/2),例如,请参阅,但出于上述原因,我们没有在自己的网站上部署它

您不需要在此“升级设置”框架中发送内容,您只希望在服务器有机会向您反馈HTTP/2之前配置服务器时发送,但通常默认值是可以的

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

HTTP2设置
标题的最小有效值为空字符串:

GET / HTTP/1.1
Host: host
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings:
User-Agent: whatever
否则,您需要创建设置帧有效负载(仅定义字节,因此没有定义9个八位字节的帧头),然后使用定义的base64转换这些字节

出于测试的目的,空的
HTTP2设置
头就可以了,但正如我所说的,您肯定不会检测网站是否支持HTTP/2:您的升级将失败,但网站很可能通过ALPN通过TLS支持HTTP/2。

此网站接受非加密的HTTP2(h2c)连接,这样做:

GET / HTTP/1.1
Host: nghttp2.org
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings:
User-Agent: whatever
正如sbordet所建议的那样,它确实会从服务器生成“101交换协议”响应

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