【问题标题】:Is there a practical HTTP Header length limit?是否有实用的 HTTP 标头长度限制?
【发布时间】:2010-11-09 00:27:08
【问题描述】:

我有一个 Web 应用程序,它使用 setRequestHeader API 将上下文信息添加到 XmlHttpRequest 对象。我正在使用自定义标题名称(例如 X-Foo)和 JSON 结构化值。它不是 URL QueryString 或 POST 正文的一部分,因为它是有关请求的元信息。

标题值是否有实际的大小限制?如果我的 JSON 被截断,它将变得无法解析。我最关心的是 Apache 2、Tomcat 6 和 IIS 7 的限制。我在 Google 上搜索了 http 标头长度限制,但许多结果似乎都过时了。 How big can a user agent string get? 中有一些相关的 cmets,但没有我想要的那么具体。

编辑: 我刚刚遇到了这个类似的问题 - Maximum on http header values?

【问题讨论】:

  • 有趣的方法。你这样发送什么元数据?
  • 另请注意,如果用户通过代理服务器连接,这可能会导致问题

标签: http iis-7 apache2 http-headers tomcat6


【解决方案1】:

是的,但限制是可配置的并且取决于平台。例如,Tomcat 的默认限制为 8K。我相信 IIS 6,不确定 IIS 7,有 16K 的限制。我在为多个网站使用集成 Windows 身份验证时遇到了这个问题。结果发现我的安全令牌在编码到标头时太大了。幸运的是,这些都是可配置的。可以在http://support.microsoft.com/kb/820129 找到 IIS 的注册表设置。我认为要更改的关键设置是 MaxFieldLength(每个标头大小)和 MaxRequestBytes(请求的总大小)。

【讨论】:

  • 我确实在 MSDN 上找到了这个链接来设置特定标头的 IIS 标头限制 - iis.net/ConfigReference/system.webServer/security/…
  • 根据知识库文章,这些注册表字段适用于 IIS6 和 IIS7
  • 虽然您可以配置服务器,但您不太可能真的可以通过防火墙、负载平衡器和代理进行全程配置。保持小标题可以避免问题。
【解决方案2】:

对于 Apache,我发现这篇 Server Limits for Apache Security 文章列出了这些指令:

  # allow up to 100 headers in a request
  LimitRequestFields 100
  # each header may be up to 8190 bytes long
  LimitRequestFieldsize 8190

对于 Nginx,来自 HttpCoreModule 的 large_client_header_buffers 指令控制:

请求的最长标题行也不能超过大小 一个缓冲区,否则客户端会收到错误“错误请求”(400)。

默认情况下,一个缓冲区的大小等于页面的大小, 取决于平台,这可以是 4K 还是 8K

【讨论】:

    【解决方案3】:

    虽然每个 Web 服务器软件都有一些限制,但是对于 HTTP request line plus 标头字段或每个标头字段是否有限制是不同的。

    总结如下:

    • Apache 1.32.02.22.38190 字节(对于每个标题字段)
    • IIS:
      • 4.02097152 字节(用于请求行加上标头字段)
      • 5.0131072 字节16384 字节,使用 Windows 2000 Service Pack 4(用于请求行和标头字段)
      • 6.016384 字节(对于每个标头字段)
    • 雄猫:
      • 5.5.x/6.0.x49152 字节(用于请求行加上标头字段)
      • 7.0.x8190 字节(用于请求行加上标头字段)

    因此得出结论:要被上述所有网络服务器接受,请求的请求行加上标头字段不应超过 8190 字节。这也是每个标题字段的限制(实际上甚至更少)。

    【讨论】:

      【解决方案4】:

      Flash Media Server 4.5 有一个非常短的默认标头长度限制,这可能会导致服务器根本不响应,尤其是在 cookie 负载适中的情况下。

      请参阅:Flash Media Server 4.5 Configuration and Administration: Configuring the server Configuring Apache HTTP Server: Specify the maximum HTTP header line length

      在 Flash Media Server Adaptor.xml 文件中,MaxHeaderLineLength 元素确定服务器可以处理的 HTTP 标头的大小。 MaxHeaderLineLength 的默认值为 1024 字节。一些浏览器 发送大于 1024 字节的标头。在这种情况下,Apache 发送 返回一个空的响应。要解决此问题,请配置 MaxHeaderLineLength 到 8192。

      注意:默认情况下,Apache HTTP 标头大小限制为 8 KB(8190 字节加上回车)。

      把它放在这里以防 Flash Media Server 上的标头大小限制影响到其他人。

      【讨论】:

        【解决方案5】:

        虽然您可以配置服务器,但您不太可能真的可以通过防火墙、负载平衡器和代理进行全程配置。保持小标题可以避免问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-20
          • 1970-01-01
          • 1970-01-01
          • 2016-10-02
          • 2013-02-23
          • 2010-09-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多