我有一个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?
答案 0 :(得分:54)
虽然每个网络服务器软件都有一些限制,但HTTP request line加上标题字段或每个标题字段是否有限制存在差异。
以下是摘要:
总而言之:要被上述所有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 Adaptor.xml文件中,
MaxHeaderLineLength
element确定服务器可以处理的HTTP头的大小。MaxHeaderLineLength
的默认值为1024字节。一些浏览器 发送大于1024字节的标头。在这种情况下,Apache发送 回复空洞的回应。要解决此问题,请配置MaxHeaderLineLength
至8192。注意:默认情况下,Apache HTTP标头大小限制为8 KB(8190字节加上回车符)。
将此设置在此处,以防Flash Media Server上的标头大小限制咬住其他人。