为什么HTTP/2客户端拒绝包含连接头的请求



查看"在Burp Suite中使用HTTP/2"以了解为什么存在剥离连接标头的选项,我发现原因是"这是因为许多HTTP/2服务器会拒绝包含此标头的请求。"。

这有具体的原因吗?

是的,HTTP/2规范在第8.1.2.2节中指出:

HTTP/2不使用连接头字段来指示特定于连接的标头字段;在该协议中,连接-通过其他方式来传送特定元数据。端点不得生成包含连接特定标头的HTTP/2消息田地;任何包含特定连接头字段的消息都必须被视为格式错误的

话虽如此,许多服务器更宽容,允许出现Connection标头,尽管它们被忽略了。

这种限制的原因是Connection标头在HTTP/1.1请求中是有意义的,其中一次通过TCP连接发送一个请求。

在像HTTP/2这样的多路复用协议中,请求(HTTP/2流(携带连接头是没有意义的,因为在同一个TCP连接上可能有多个请求。

举一个极端的例子,如果您有一个Connection: close的HTTP/2流和另一个Connection: keep-alive的并发HTTP/2流(尽管即使在HTTP/1.1中也不推荐使用keep-alive(,那么HTTP/2实现应该做什么?按照第一个流建议关闭连接,还是按照第二个流建议保持连接打开?

显然,这不适用于像HTTP/2这样的多路复用协议,这就是实现拒绝此类请求的原因。

最新更新