http标头值的最大值?

时间:2009-03-26 15:15:08

标签: http http-headers

HTTP标头是否允许最大允许大小?如果是这样,它是什么?如果没有,这是服务器特定的东西,或者是允许任何大小的标题的公认标准吗?

7 个答案:

答案 0 :(得分:280)

不,HTTP没有定义任何限制。但是,大多数Web服务器都会限制它们接受的标头大小。例如,Apache default limit中的IIS it's 16K为8KB,How big can a user agent string get?。如果标头大小超过该限制,服务器将返回413 Entity Too Large错误。

相关问题:{{3}}

答案 1 :(得分:203)

正如vartec所述,HTTP规范没有定义限制,但默认情况下会有许多服务器。这实际上意味着,下限是 8K 。对于大多数服务器,此限制适用于请求行和所有标题字段的总和(因此请保持您的Cookie简短)。

值得注意的是,nginx默认使用系统页面大小,在大多数系统上都是4K。您可以查看这个小程序:

pagesize.c:

#include <unistd.h>
#include <stdio.h>

int main() {
    int pageSize = getpagesize();
    printf("Page size on your system = %i bytes\n", pageSize);
    return 0;
}

使用gcc -o pagesize pagesize.c进行编译,然后运行./pagesize。来自Linode的我的ubuntu服务器尽职尽责地告诉我答案是4k。

答案 2 :(得分:4)

  

HTTP不会对每个标头的长度设置预定义的限制      如上所述,字段或整个标题部分的长度      在第2.5节中。各个标题的各种临时限制      字段长度在实践中找到,通常取决于具体情况      字段语义。

HTTP标头值受服务器实施的限制。 Http规范不限制标题大小。

  

接收请求标头字段或字段集的服务器,      大于它希望处理的大小必须用适当的4xx响应      (客户端错误)状态代码。忽略这样的头字段会      增加服务器的漏洞请求走私攻击      (第9.5节)。

发生这种情况时,大多数服务器都会返回413 Entity Too Large或适当的4xx错误。

  

客户端可以丢弃或截断收到的头字段      如果字段语义是大于客户端希望处理的大于      这样可以安全地忽略掉落的值而不改变      消息框架或响应语义。

无上限的HTTP标头大小可使服务器受到攻击,并可降低其为有机流量提供服务的能力。

Source

答案 3 :(得分:3)

这是最受欢迎的Web服务器的限制

  • Apache-8K
  • Nginx-4K-8K
  • IIS-8K-16K
  • Tomcat-8K – 48K

答案 4 :(得分:2)

2011 年的 RFC 6265 规定了对 cookie 的具体限制。

https://tools.ietf.org/html/rfc6265 6.1.限制

实际的用户代理实现在数量和 他们可以存储的 cookie 的大小。通用用户代理应该 提供以下各项最低功能:

o 每个 cookie 至少 4096 字节(按 cookie 的名称、值和属性的长度)。

o 每个域至少 50 个 cookie。

o 总共至少 3000 个 cookie。

服务器应该使用尽可能少的 cookie 以避免 达到这些实施限制并最小化网络 由于每个请求中都包含 Cookie 标头,因此带宽不足。

如果用户代理未能返回,服务器应该优雅地降级 Cookie 标头中的一个或多个 cookie,因为用户代理可能会 随时根据用户的订单逐出任何 cookie。

--

RFC 的目标受众是用户代理或服务器必须支持的受众。似乎要调整您的服务器以支持浏览器允许的内容,您需要将 4096*50 配置为限制。正如接下来的文字所暗示的那样,这似乎远远超出了典型 Web 应用程序的需要。使用当前限制和 RFC 概述的上限并比较更高配置的内存和 IO 后果会很有用。

答案 5 :(得分:0)

我还发现在某些情况下,在多个标题的情况下502/400的原因可能是因为大量的标题而不考虑大小。 来自文档

  

tune.http.maxhdr     设置请求中的最大标头数。当请求附带一个     标题数大于此值(包括第一行),它是     拒绝了#34; 400 Bad Request&#34;状态代码。同样,反应过大     被&#34; 502 Bad Gateway&#34;阻止。默认值为101,这就足够了     对于所有用法,考虑到广泛部署的Apache服务器使用     相同的限制。将此限制进一步推迟暂时允许可能很有用     一个错误的应用程序,它修复时工作。请记住每一个     新标题为每个会话消耗32位内存,所以不要推动它     限制太高。

https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#3.2-tune.http.maxhdr

答案 6 :(得分:0)

如果要使用Akamai之类的任何DDOS提供程序,则它们在响应标头大小中的最大限制为8k。因此,基本上尝试将响应标头的大小限制在8k以下。