http标头值的最大值?

Cor*_*ory 307 http http-headers

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

var*_*tec 297

不,HTTP没有定义任何限制.但是,大多数Web服务器都会限制它们接受的标头大小.例如在Apache中,默认限制为8KB,在IIS中为16K.413 Entity Too Large如果标头大小超过该限制,服务器将返回错误.

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

  • 此答案表明服务器最大接受的标头大小.但是Web服务器(例如Apache)能够发送的最大头大小是多少? (10认同)
  • @hakre:IIRC,整行为8K,计算整个标头行(标头名称,空格和标头的有效载荷)。 (2认同)
  • 请注意防火墙限制!我们有很多用户开始无法登录。显然,6 月 9 日,fortiguard 更新了 HTTP.Server.Authorization.Buffer.Overflow 的 IPS 定义,以限制授权标头的长度 - 请参阅:https://fortiguard .com/encyclopedia/ips/12351 由于缺乏文档,我们不得不猜测授权标头的长度。最终在 350 个字符左右就可以了。 (2认同)

小智 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.

  • 无需编写代码来获取页面大小.从终端:getconf PAGESIZE (21认同)
  • 对于apache2,URL长度由`LimitRequestLine`控制,并且`LimitRequestFieldSize`单独应用于每个HTTP标题行...而不是"sum of ..." (6认同)
  • 自写这个答案以来,这可能已经改变,但链接的nginx页面与答案不符.nginx页面指示默认缓冲区大小为8k,并且请求默认情况下可以使用4个缓冲区(缓冲区大小本身限制了请求行和每个单独标头的大小).所以这表明nginx允许介于16-32k之间(我假设一行不能分成两个缓冲区,因此缓冲区可能不会一直填充). (4认同)

rea*_*lPK 8

如第 2.5 节所述,HTTP 不会对每个标头字段的长度或整个标头部分的长度设置预定义的限制。在实践中发现了对单个报头字段长度的各种特别限制,通常取决于特定的字段语义。

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

收到请求头字段或字段集大于它希望处理的服务器必须以适当的 4xx(客户端错误)状态代码响应。忽略此类标头字段会增加服务器请求走私攻击的脆弱性(第 9.5 节)。

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

如果字段语义使得丢弃的值可以安全地忽略而不改变消息帧或响应语义,则客户端可以丢弃或截断接收到的大于客户端希望处理的头字段。

无上限的 HTTP 标头大小使服务器容易受到攻击,并可能降低其服务自然流量的能力。

来源


Sar*_* Ak 6

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

  • 阿帕奇 - 8K
  • Nginx - 4K-8K
  • IIS - 8K-16K
  • 雄猫 - 8K – 48K
  • 节点 (<13) - 8K;(>13) - 16K


Aja*_*ani 6

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

6.1. 限制

实际的用户代理实现对其可以存储的 cookie 的数量和大小有限制。通用用户代理应该提供以下每一项最低限度的功能:

  • 每个 cookie 至少 4096 字节(通过 cookie 的名称、值和属性的长度总和来衡量)。

  • 每个域至少有 50 个 cookie。

  • 总共至少 3000 个饼干。

服务器应该使用尽可能少、尽可能小的 cookie,以避免达到这些实现限制,并最大限度地减少网络带宽,因为每个请求中都包含 Cookie 标头。

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

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

  • 顺便说一句,MS IE11 和 MS Edge(Chromium 之前的版本)有 10kb 浏览器 cookie 限制,我发现这比服务器设置更相关,服务器设置似乎大部分是可配置的。 (2认同)