HTTP头部长度是否存在实际限制?

74
我有一个Web应用程序,使用setRequestHeader API将上下文信息添加到XmlHttpRequest对象中。 我正在使用自定义标题名称(例如X-Foo)和JSON结构化值。 它不是URL QueryString或POST正文的一部分,因为它是关于请求的元信息。
在标题值方面是否有实际大小限制? 如果我的JSON被截断,它将无法解析。 我最关心的是Apache 2、Tomcat 6和IIS 7中的限制。 我在Google上搜索了http header length limit,但许多结果似乎已过时。 How big can a user agent string get?中有一些相关评论,但不如我所希望的那么具体。 编辑: 我刚刚遇到了这个类似的问题 - Maximum on http header values?

有趣的方法。你发送了哪些元数据? - Marcus Downing
请注意,如果用户通过代理服务器连接,这可能会导致问题。 - carpii
5个回答

60
尽管每种网络服务器软件都有一些限制,但是是否存在HTTP请求行加上头字段的限制或每个头字段的限制是有区别的。
以下是摘要:
  • Apache 1.3, 2.0, 2.2, 2.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字节。这也是每个头部字段的限制(实际上更少)。


现代的Tomcat只有8192行代码。 - Gallaecio

51

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


1
我在MSDN上找到了一个链接,可以设置特定标头的IIS标头限制 - http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits/headerLimits - Kevin Hakanson
根据该知识库文章,那些注册表字段适用于IIS6和IIS7。 - Cheeso
2
虽然你可以配置服务器,但很可能无法通过防火墙、负载均衡器和代理进行完全配置。保持标头大小较小可以避免问题。 - Lothar

15

对于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指令用于控制此行为:

请求中最长的头部行也不能超过一个缓冲区的大小,否则客户端将收到“Bad request”(400)错误。

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


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元素确定服务器可以处理的HTTP头大小。 MaxHeaderLineLength的默认值为1024字节。一些浏览器发送的标题超过了1024字节。在这种情况下,Apache会返回一个空响应。要解决此问题,请将MaxHeaderLineLength配置为8192。需要注意的是,默认情况下,Apache HTTP头大小限制为8 KB(8190字节加回车)。如果您遇到Flash Media Server的头文件大小限制问题,请参考本文。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接