【发布时间】:2022-01-20 23:51:26
【问题描述】:
查看“在 Burp Suite 中使用 HTTP/2”以找出为什么存在剥离连接标头的选项,我发现原因是“这是因为许多 HTTP/2 服务器会拒绝包含此标头的请求.'.
有什么具体原因吗?
【问题讨论】:
查看“在 Burp Suite 中使用 HTTP/2”以找出为什么存在剥离连接标头的选项,我发现原因是“这是因为许多 HTTP/2 服务器会拒绝包含此标头的请求.'.
有什么具体原因吗?
【问题讨论】:
是的,HTTP/2 规范在section 8.1.2.2 中声明:
HTTP/2 不使用 Connection 头域来表示 连接特定的头字段;在这个协议中,连接- 特定元数据通过其他方式传达。端点不得 生成包含连接特定标头的 HTTP/2 消息 字段;任何包含特定连接头字段的消息必须 被视为畸形
话虽如此,许多服务器更宽容,可以容忍Connection 标头存在,尽管它们被忽略了。
此限制的原因是 Connection 标头在 HTTP/1.1 请求中有意义,其中一次通过 TCP 连接发送一个请求。
在像 HTTP/2 这样的多路复用协议中,请求(HTTP/2 流)携带连接头是没有意义的,因为同一个 TCP 连接上可能有多个请求。
举个极端的例子,如果你有一个带有Connection: close 的HTTP/2 流和另一个带有Connection: keep-alive 的并发HTTP/2 流(尽管keep-alive 即使在HTTP/1.1 中也被弃用了),那么应该怎么做? HTTP/2 的实现呢?按照第一个流的建议关闭连接,还是按照第二个流的建议保持连接?
显然这不适用于 HTTP/2 等多路复用协议,这就是实现拒绝此类请求的原因。
【讨论】: