猿问

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

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


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


慕容森
浏览 717回答 3
3回答

慕的地8271018

尽管每种Web服务器软件都有一些限制,但是HTTP请求行加标头字段或每个标头字段是否有限制是有区别的。总结如下:的Apache 1.3,2.0,2.2,2.3:8190字节(对于每个报头字段)IIS:4.0:2097152字节(用于请求行和标题字段)5.0:131072字节,Windows 2000 Service Pack 4带16384字节(用于请求行和标题字段)6.0:16384字节(用于每个标头字段)Tomcat:5.5.x / 6.0.x:49152字节(用于请求行和标题字段)7.0.x:8190字节(用于请求行和标题字段)得出以下结论:要被以上所有Web服务器接受,请求的请求行加上标题字段不得超过8190 Bytes。这也是每个标头字段的限制(实际上更少)。

犯罪嫌疑人X

对于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
随时随地看视频慕课网APP
我要回答