【问题标题】:Why do HTTP/2 clients reject requests containing the connection header?为什么 HTTP/2 客户端拒绝包含连接头的请求?
【发布时间】:2022-01-20 23:51:26
【问题描述】:

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

有什么具体原因吗?

【问题讨论】:

    标签: http http2 burp


    【解决方案1】:

    是的,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 等多路复用协议,这就是实现拒绝此类请求的原因。

    【讨论】:

      猜你喜欢
      • 2020-01-12
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 2016-04-22
      相关资源
      最近更新 更多