是否有实际的 HTTP 头长度限制?

我有一个 Web 应用程序,它使用 SetRequestHeader API 向 XmlHttpRequest对象添加上下文信息。我使用了一个自定义的头名(例如 X-Foo)和一个 JSON结构化值。它不是 URL QueryString 或 POST 主体的一部分,因为它是关于请求的元信息。

标题值是否有实际的大小限制?如果我的 JSON 被截断,它将变得无法解析。我最关心的是 Apache2、 Tomcat6和 IIS7中的限制。我在谷歌上搜索了一下 Http 头长度限制,但很多结果似乎都过时了。在 用户代理字符串能有多大?中有一些相关的评论,但是没有我想要的那么具体。

编辑: 我刚刚遇到了一个类似的问题—— http 头值的最大值?

109726 次浏览

是的,但是这些限制是可配置的,并且取决于平台。例如,雄猫的默认限制是8K。我相信 IIS6,不确定 IIS7,有一个16K 的限制。我在几个网站上使用集成 Windows 认证时遇到了这个问题。原来我的安全令牌在编码到头部时太大了。幸运的是,这些是可配置的。IIS 的注册表设置可以在 http://support.microsoft.com/kb/820129找到。我认为需要更改的关键设置是 MaxFieldLlength (每个头大小)和 MaxRequestBytes (请求总大小)。

对于 Apache,我发现这篇 Apache 安全的服务器限制文章列出了以下指令:

  # 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 _ buffer指令控制如下:

请求的最长标题行也必须不超过 一个缓冲区,否则客户端将得到错误“ Bad request”(400)。

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

虽然每个 Web 服务器软件都有一些限制,但是对于 HTTP 请求线路加上头字段或每个头字段是否有限制还是有区别的。

总结如下:

  • Apache 1.32.02.22.3: 8190字节(对于每个头字段)
    • 4.0 : 2097152字节(用于请求行和头字段)
    • 5.0 : 带有 Windows 2000 Service Pack 4的 131072字节16384字节(用于请求行和头字段)
    • 6.0 : 16384字节(对于每个头字段)
  • 雄猫:
    • 5.5.x /6.0. x: 49152字节(用于请求行和头字段)
    • 7.0.x : 8190字节(用于请求行和头字段)

所以总结一下: 要被上面所有的网络服务器接受,一个 Request 的请求行加上头字段不应超过8190字节。这也是每个头字段的限制(实际上甚至更少)。

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

请参阅: http://hel.adobe.com/en _ US/Flash mediaserver/configadmin/WSE2A5A7B9-E118-496f-92F9-E295038DB7DB.html # WS5551c1c6583582d3-3a4cefdf129f6350929-8000”rel = “ nofollow”> Flash Media Server 4.5配置和管理: 配置服务器 配置 Apache HTTP Server: 指定最大 HTTP 头行长度

在 Flash Media Server Adaptor.xml 文件中,MaxHeaderLineLength 元素确定服务器可以处理的 HTTP 头的大小。 MaxHeaderLineLength的默认值是1024字节 发送一个大于1024字节的头 若要修复此问题,请配置 MaxHeaderLineLength呼叫8192。

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

把这个放在这里,以防 Flash 媒体服务器上的头大小限制伤害到其他人。

虽然您可以配置服务器,但是不太可能通过防火墙、负载平衡器和代理来配置整个过程。保持头大小小可以避免问题。