Cor*_*ory 307 http http-headers
是否允许HTTP标头允许的最大允许大小?如果是这样,它是什么?如果没有,这是特定于服务器的东西,还是允许任何大小的标题的公认标准?
var*_*tec 297
不,HTTP没有定义任何限制.但是,大多数Web服务器都会限制它们接受的标头大小.例如在Apache中,默认限制为8KB,在IIS中为16K.413 Entity Too Large
如果标头大小超过该限制,服务器将返回错误.
相关问题:用户代理字符串有多大?
小智 212
正如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;
}
Run Code Online (Sandbox Code Playgroud)
gcc -o pagesize pagesize.c
然后编译然后运行./pagesize
.来自Linode的我的ubuntu服务器尽职尽责告诉我答案是4k.
如第 2.5 节所述,HTTP 不会对每个标头字段的长度或整个标头部分的长度设置预定义的限制。在实践中发现了对单个报头字段长度的各种特别限制,通常取决于特定的字段语义。
HTTP 标头值受服务器实现的限制。Http 规范不限制标头大小。
收到请求头字段或字段集大于它希望处理的服务器必须以适当的 4xx(客户端错误)状态代码响应。忽略此类标头字段会增加服务器请求走私攻击的脆弱性(第 9.5 节)。
413 Entity Too Large
发生这种情况时,大多数服务器将返回或相应的 4xx 错误。
如果字段语义使得丢弃的值可以安全地忽略而不改变消息帧或响应语义,则客户端可以丢弃或截断接收到的大于客户端希望处理的头字段。
无上限的 HTTP 标头大小使服务器容易受到攻击,并可能降低其服务自然流量的能力。
这是最流行的网络服务器的限制
2011 年的RFC 6265规定了对 cookie 的具体限制。
6.1. 限制
实际的用户代理实现对其可以存储的 cookie 的数量和大小有限制。通用用户代理应该提供以下每一项最低限度的功能:
每个 cookie 至少 4096 字节(通过 cookie 的名称、值和属性的长度总和来衡量)。
每个域至少有 50 个 cookie。
总共至少 3000 个饼干。
服务器应该使用尽可能少、尽可能小的 cookie,以避免达到这些实现限制,并最大限度地减少网络带宽,因为每个请求中都包含 Cookie 标头。
如果用户代理无法在 Cookie 标头中返回一个或多个 cookie,服务器应该优雅地降级,因为用户代理可能会根据用户的命令随时驱逐任何 cookie。
RFC 的目标受众是用户代理或服务器必须支持的内容。看来要调整您的服务器以支持浏览器允许的内容,您需要将 4096*50 配置为限制。正如下面的文字所示,这似乎远远超出了典型 Web 应用程序的需要。使用电流限制和 RFC 概述的上限并比较较高配置的内存和 IO 后果将很有用。
归档时间: |
|
查看次数: |
247493 次 |
最近记录: |