我有一个 Web 应用程序,可以将上下文信息添加到 XmlHttp请求 对象使用 设置请求头 API。我正在使用自定义标头名称(例如X-Foo)和一个 JSON 结构化价值。它不是 URL QueryString 或 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(的请求总大小)。

其他提示

虽然每个网络服务器软件具有一定的局限性,是有差别是否有限制的 HTTP请求线 加上头域或每个标题领域。

这里有一个摘要:

  • Apache 1.3, 2.0, 2.2, 2.3: 8190字节 (针对每个头域)
  • IIS:
    • 4.0: 2097152字节 (请求线加上头领)
    • 5.0: 131072Bytes, 16384字节 Windows2000服务包4(请求线加上头领)
    • 6.0: 16384字节 (针对每个头领)
  • Tomcat:
    • 5.5.x/6.0.x: 49152字节 (请求线加上头领)
    • 7.0.x: 8190字节 (请求线加上头领)

因此,要结论:接受所有网络服务器上面, 请求是请求行加标题领域不应超过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 文件中, MaxHeaderLineLengthelement 决定服务器可以处理的 HTTP 标头的大小。默认值为 MaxHeaderLineLength 是1024字节。一些浏览器发送大于1024个字节的标头。在这种情况下,Apache会发回空响应。要解决此问题,请配置 MaxHeaderLineLength 至 8192。

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

将其放在这里以防 Flash Media Server 上的标头大小限制影响其他人。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top