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


71

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

标头值有实际的大小限制吗?如果我的JSON被截断,它将变得不可解析。我最关心的是Apache 2,Tomcat 6和IIS 7中的限制。我在Google搜索了http标头的长度限制,但其中许多结果似乎都过时了。用户代理字符串可以达到多大?有一些相关注释但没有我想要的那么具体。

编辑: 我只是遇到了这个类似的问题-http标头值的最大值?


有趣的方法。您像这样发送什么元数据?
马库斯·唐宁

另请注意,如果用户通过代理服务器进行连接,这可能会导致问题
carpii 2012年

Answers:


51

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


1
我发现在MSDN上这个链接来设置IIS特定头球冲顶限制- iis.net/ConfigReference/system.webServer/security/...
凯文Hakanson潜在

根据知识库文章,这些注册表字段适用于IIS6和IIS7
Cheeso 2011年

2
虽然可以配置服务器,但是不太可能真正通过防火墙,负载平衡器和代理来进行整个配置。保持标题尺寸较小可以避免问题。
Lothar 2014年

58

尽管每种Web服务器软件都有一些限制,但是HTTP请求行加标头字段或每个标头字段是否有限制是有区别的。

总结如下:

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

得出以下结论:要被以上所有Web服务器接受,请求的请求行加上标头字段不应超过8190 Bytes。这也是每个标头字段的限制(实际上更少)。


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

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

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


4

虽然可以配置服务器,但不太可能真正通过防火墙,负载平衡器和代理来进行整个配置。保持标题尺寸较小可以避免问题。


3

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

请参阅:Flash Media Server 4.5配置和管理:配置服务器配置Apache HTTP Server:指定最大HTTP标头行长度

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.