HTTP标头是否允许最大允许大小?如果是这样,它是什么?如果没有,这是服务器特定的东西,或者是允许任何大小的标题的公认标准吗?
答案 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标头大小可使服务器受到攻击,并可降低其为有机流量提供服务的能力。
答案 3 :(得分:3)
这是最受欢迎的Web服务器的限制
答案 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以下。