我有一个Web应用程序,增加了上下文信息的XmlHttpRequest使用对象setRequestHeader API。 我使用的是自定义标题名称(例如:X-美孚)和JSON结构值。 这不是URL查询字符串或POST身体的一部分,因为它是关于请求的元信息。
是否有实际大小限制头价值? 如果我的JSON被截断,它成为不可解析。 我最关心的是Apache 2中的Tomcat 6和IIS 7我做了谷歌搜索HTTP报头长度上限的限制,但很多结果似乎过时。 有一些相关的评论,用户代理字符串多大可以得到? 但没有具体的,我想。
编辑:我只是碰到这种类似的问题跑了- 在HTTP标头值最大?
是的,但限制是可配置的,依赖于平台。 例如, Tomcat的拥有8K的默认限制。 我相信,IIS 6,不知道IIS 7,有16K的限制。 我使用集成Windows身份验证的几个网站时遇到了这一点。 结果我安全令牌是太大时编码到标头。 幸运的是,这些都是可配置的。 针对IIS的注册表设置可以在这里找到http://support.microsoft.com/kb/820129 。 相信按键设置改变是的MaxFieldLength(每头大小)和MaxRequestBytes(的请求总大小)。
虽然每个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个字节 。 这也是每一个报头字段的限制(有效地甚至更小)。
对于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
虽然您可以配置服务器,这是不可能的,你真的可以通过防火墙,负载均衡和代理服务器配置的整套方法。 保持头部尺寸小问题保持远离。
在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上的标头大小限制咬别人。