HTTP头值的最大值?

是否有一个可接受的HTTP头的最大允许大小?如果有,是什么?如果不是,这是特定于服务器的东西,还是允许任何大小的头的公认标准?

396568 次浏览

不,HTTP没有定义任何限制。然而,大多数web服务器确实限制了它们接受的头文件的大小。例如,在Apache默认限制中是8KB,在IIS,它是16K中。如果报头大小超过该限制,服务器将返回413 Entity Too Large错误。

相关问题:用户代理字符串可以有多大?

正如vartec上面所说,HTTP规范没有定义限制,但是许多服务器默认情况下是这样做的。这意味着,实际上,下限是8 k。对于大多数服务器,这个限制适用于请求行和ALL报头字段的总和(所以保持你的cookie简短)。

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

< p > 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。我的ubuntu服务器Linode尽职地告诉我答案是4k。

HTTP不对每个报头的长度进行预定义限制 字段或标题节的长度作为一个整体,如所述 第2.5节。对单个头文件的各种特殊限制 场长是在实践中发现的,往往视具体情况而定 领域语义。< / p >

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

接收请求报头字段或一组字段的服务器, 大于它希望的进程必须响应一个适当的4xx (客户端错误)状态码。忽略这样的报头字段 增加服务器对请求走私攻击的脆弱性 (9.5节)。< / p >

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

客户端可以丢弃或截断接收到的报头字段 如果字段语义大于客户端希望处理的值 这样就可以在不更改的情况下安全地忽略掉所删除的值 消息框架或响应语义

不封顶的HTTP报头大小会使服务器暴露在攻击之下,并降低其服务有机流量的能力。

Source .

我还发现在某些情况下,在许多头文件的情况下出现502/400的原因可能是因为有大量的头文件而不考虑大小。 从文档

< p > tune.http.maxhdr 设置请求中报头的最大数量。当请求带有 大于此值(包括第一行)的报头数目 以“400坏请求”状态码拒绝。同样,反应太大 被“502坏网关”阻止。缺省值是101,这就足够了 对于所有用法,考虑到广泛部署的Apache服务器使用 同样的限制。将此限制进一步推到临时允许的范围内是有用的 一个有bug的应用程序在被修复之前可以正常工作。记住每一个 新报头为每个会话消耗32位内存,所以不要推送这个

< a href = " https://cbonte.github.io/haproxy-dconv/configuration-1.5.html 3.2 -tune.http。Maxhdr " rel="nofollow noreferrer">https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#3.2-tune.http.maxhdr

这是最流行的网络服务器的限制

  • Apache - 8K
  • Nginx - 4K-8K
  • Iis - 8k-16k
  • 雄猫- 8K - 48K
  • 节点(<13) - 8K;(>13) - 16K

如果您打算使用任何像Akamai这样的DDOS提供商,他们的响应头大小最大限制为8k。所以尽量将响应头大小限制在8k以下。

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

https://www.rfc-editor.org/rfc/rfc6265 6.1. 限制< / p >

实际的用户代理实现在数量和 它们可以存储的cookie大小。一般使用的用户代理应该

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

o每个域至少50个cookie。

o总共至少3000个饼干。

服务器应该使用尽可能少、尽可能小的cookie来避免 达到这些实现限制并使网络最小化

.带宽,因为Cookie头包含在每个请求中

如果用户代理返回失败,服务器应该正常降级 Cookie头中的一个或多个Cookie,因为用户代理可能会

.在任何时间根据用户的命令删除任何cookie

--

RFC的预期受众是用户代理或服务器必须支持的内容。似乎要调优您的服务器以支持浏览器所允许的功能,您需要配置4096*50作为限制。正如下面的文本所示,这似乎远远超出了典型web应用程序所需要的。使用当前限制和RFC概述的上限,并比较较高配置的内存和IO结果是很有用的。