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


当前回答

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

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

其他回答

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

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

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

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

Apache 2.0, 2.2: 8K nginx: 4K - 8K IIS:不同版本不同,8K - 16K Tomcat:根据版本不同,8K - 48K (?!)

值得注意的是,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。

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

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

实际的用户代理实现在数量和 它们可以存储的cookie大小。一般使用的用户代理应该 提供以下每个最低功能:

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

o每个域至少50个cookie。

o总共至少3000个饼干。

服务器应该使用尽可能少和尽可能小的cookie来避免 达到这些实现限制并使网络最小化 由于Cookie报头包含在每个请求中的带宽。

如果用户代理返回失败,服务器应该正常降级 Cookie头中的一个或多个Cookie,因为用户代理可能会 在任何时间从用户的命令驱逐任何cookie。

--

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

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

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

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

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

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

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