是否有一个实际的HTTP头长度限制?是否有一个实际的HTTP头长度限制?(Is there a pr

2019-05-17 14:58发布

我有一个Web应用程序,增加了上下文信息的XmlHttpRequest使用对象setRequestHeader API。 我使用的是自定义标题名称(例如:X-美孚)和JSON结构值。 这不是URL查询字符串或POST身体的一部分,因为它是关于请求的元信息。

是否有实际大小限制头价值? 如果我的JSON被截断,它成为不可解析。 我最关心的是Apache 2中的Tomcat 6和IIS 7我做了谷歌搜索HTTP报头长度上限的限制,但很多结果似乎过时。 有一些相关的评论,用户代理字符串多大可以得到? 但没有具体的,我想。

编辑:我只是碰到这种类似的问题跑了- 在HTTP标头值最大?

Answer 1:

是的,但限制是可配置的,依赖于平台。 例如, Tomcat的拥有8K的默认限制。 我相信,IIS 6,不知道IIS 7,有16K的限制。 我使用集成Windows身份验证的几个网站时遇到了这一点。 结果我安全令牌是太大时编码到标头。 幸运的是,这些都是可配置的。 针对IIS的注册表设置可以在这里找到http://support.microsoft.com/kb/820129 。 相信按键设置改变是的MaxFieldLength(每头大小)和MaxRequestBytes(的请求总大小)。



Answer 2:

虽然每个web服务器软件有一定的局限性,是有区别是否有用于限制HTTP请求行加头字段或者每个头字段。

这里有一个总结:

  • 的Apache 1.3 , 2.0 , 2.2 , 2.3 :8190字节 (对于每个报头字段)
  • IIS:
    • 4.0 :2097152字节 (用于请求线加上报头字段)
    • 5.0 :131072字节 ,与Windows 16384个字节 2000服务包4(用于请求行加上报头字段)
    • 6.0 :16384字节 (对于每个报头字段)
  • Tomcat的:
    • 的5.5.x / 对6.0.x :49152个字节 (用于请求线加上报头字段)
    • 的7.0.x :8190字节 (用于请求线加上报头字段)

因此得出结论:要被所有的web服务器上面接受请求的请求行加头字段不应该超过8190个字节 。 这也是每一个报头字段的限制(有效地甚至更小)。



Answer 3:

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

  # allow up to 100 headers in a request
  LimitRequestFields 100
  # each header may be up to 8190 bytes long
  LimitRequestFieldsize 8190

对于Nginx的,在large_client_header_buffers从HttpCoreModule指令控制这样的:

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

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



Answer 4:

虽然您可以配置服务器,这是不可能的,你真的可以通过防火墙,负载均衡和代理服务器配置的整套方法。 保持头部尺寸小问题保持远离。



Answer 5:

在Flash Media Server的4.5有一个很短的默认报头长度限额,这可能会导致服务器根本就没有回应,特别是在有一个温和的cookie的负载情况。

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

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

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

在此情况下,把这个Flash Media Server上的标头大小限制咬别人。



文章来源: Is there a practical HTTP Header length limit?