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

时间:2009-07-08 12:05:56

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

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

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

修改 我刚刚遇到了类似的问题 - Maximum on http header values?

5 个答案:

答案 0 :(得分:54)

虽然每个网络服务器软件都有一些限制,但HTTP request line加上标题字段或每个标题字段是否有限制存在差异。

以下是摘要:

  • Apache 1.32.02.22.3 8190字节(对于每个标题字段)
  • IIS:
    • 4.0 2097152字节(对于请求行和标题字段)
    • 5.0 131072字节 16384字节与Windows 2000 Service Pack 4(对于请求行和标题字段)
    • 6.0 16384字节(对于每个标题字段)
  • Tomcat的:
    • 5.5.x / 6.0.x 49152字节(对于请求行和标题字段)
    • 7.0.x 8190字节(对于请求行和标题字段)

总而言之:要被上述所有Web服务器接受,请求的请求行和标题字段不应超过8190字节。这也是每个标题字段的限制(实际上甚至更少)。

答案 1 :(得分:49)

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

答案 2 :(得分:14)

对于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 :(得分:4)

虽然您可以配置服务器,但您不太可能真正配置防火墙,负载平衡器和代理的整个方式。保持标题大小不会使问题消失。

答案 4 :(得分:3)

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   element确定服务器可以处理的HTTP头的大小。   MaxHeaderLineLength的默认值为1024字节。一些浏览器   发送大于1024字节的标头。在这种情况下,Apache发送   回复空洞的回应。要解决此问题,请配置   MaxHeaderLineLength至8192。

     

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

将此设置在此处,以防Flash Media Server上的标头大小限制咬住其他人。