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

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

标题值是否有实际的大小限制? 如果我的JSON被截断,它将变成不可parsing的。 我最关心的是Apache 2,Tomcat 6和IIS 7的限制。我做了一个Googlesearchhttp头的长度限制 ,但是其中很多结果看起来有点过时。 用户代理string有多大有一些相关的注释? 但并不像我想的那么具体。

编辑:我刚刚跑过这个类似的问题 – 最大的http头值?

是的,但限制是可configuration的,并取决于平台。 例如, Tomcat具有8K的默认限制。 我相信,不知道IIS 7的IIS 6有16K的限制。 我在几个网站上使用集成的Windows身份validation时遇到了这个问题。 当编码到头部时,我的安全令牌太大了。 幸运的是,这些是可configuration的。 IIS的registry设置可以在http://support.microsoft.com/kb/820129find。; 我相信要更改的关键设置是MaxFieldLength(每个标头大小)和MaxRequestBytes(请求的总大小)。

虽然每个Web服务器软件都有一些限制,但HTTP请求行加上标题字段或每个标题字段是有限制的。

这里有一个总结:

  • Apache 1.3,2.0,2.2,2.38190字节 (每个头字段)
  • IIS:
    • 4.0 : 2097152字节 (用于请求行加头字段)
    • 5.0 : 131072字节 ,与Windows 2000 Service Pack 4 16384字节 (请求行加头字段)
    • 6.0 : 16384字节 (每个头字段)
  • Tomcat的:
    • 5.5.x / 6.0.x : 49152字节 (请求行加头字段)
    • 7.0.x : 8190字节 (用于请求行加头字段)

所以得出结论:要被上面所有的Web服务器所接受, 请求的请求行和标题字段不能超过8190字节 。 这也是每个头字段的限制(有效甚至更less)。

对于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_buffers指令控制着这个:

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

默认情况下,一个缓冲区的大小等于页面的大小,具体取决于4K或8K的平台

虽然可以configuration服务器,但实际上不太可能通过防火墙,负载平衡器和代理完成整个configuration。 保持头部大小很小,避免了问题。

Flash Media Server 4.5具有非常短的默认标头长度限制,可能导致服务器无法响应,特别是在存在适度的Cookie负载的情况下。

请参阅: Flash Media Server 4.5configuration和pipe理:configuration服务器configurationApache HTTP Server:指定最大的HTTP标题行长度

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

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

把这个放在这里是为了防止Flash Media Server上的头大小限制咬别人。