当前位置:  开发笔记 > 后端 > 正文

http标头值的最大值?

如何解决《http标头值的最大值?》经验,为你挑选了2个好方法。

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



1> vartec..:

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

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


此答案表明服务器最大接受的标头大小.但是Web服务器(例如Apache)能够发送的最大头大小是多少?
@hakre:IIRC,整行为8K,计算整个标头行(标头名称,空格和标头的有效载荷)。

2> 小智..:

正如vartec所述,HTTP规范没有定义限制,但默认情况下会有许多服务器.实际上,这意味着下限为8K.对于大多数服务器,此限制适用于请求行和所有标头字段总和(因此请保持cookie短).

的Apache 2.0,2.2:8K

nginx:4K - 8K

IIS:因版本而异,8K - 16K

Tomcat:因版本而异,8K - 48K(?!)

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

pagesize.c:

#include 
#include 

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.


无需编写代码来获取页面大小.从终端:getconf PAGESIZE
对于apache2,URL长度由`LimitRequestLine`控制,并且`LimitRequestFieldSize`单独应用于每个HTTP标题行...而不是"sum of ..."
自写这个答案以来,这可能已经改变,但链接的nginx页面与答案不符.nginx页面指示默认缓冲区大小为8k,并且请求默认情况下可以使用4个缓冲区(缓冲区大小本身限制了请求行和每个单独标头的大小).所以这表明nginx允许介于16-32k之间(我假设一行不能分成两个缓冲区,因此缓冲区可能不会一直填充).
推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有