HTTP标头对浏览器来说太大了吗?

HoL*_*ieR 17 browser ajax http-headers

我正在构建一个使用HTTP Content和HTTP Header来发送和接收数据的AJAX应用程序.是否有一个点,从HTTP头接收的数据将不会被浏览器读取,因为它太大了?如果是,那么限制是什么,并且它在所有浏览器中都是相同的行为?

我知道理论上对HTTP标头的大小没有限制,但实际上有什么意义,我可能在某些平台,浏览器或客户端计算机或机器上安装的某些软件下遇到问题.我更关注使用HTTP标头的安全实践指南.换句话说,在没有潜在问题进入线路的情况下,HTTP标头可用于传输其他数据的范围是多少?


谢谢,关于这个问题的所有输入,非常感谢和有趣.托马斯的回答得到了赏金,但Jon Hanna的回答提出了一个关于代理的非常好的观点.

Tho*_*mas 42

简短的答案:

相同的行为:没有

流行浏览器中的最低限制:

  • 每个标头10KB
  • 一个响应中的所有标头为256 KB.

运行Mac OS X 10.6.4的MacBook测试结果:

成功加载最大响应,所有数据都在一个标题中:

  • 歌剧10:150MB
  • Safari 5:20MB
  • IE 6 via Wine:10MB
  • Chrome 5:250KB
  • Firefox 3.6:10KB

注意 Opera,Safari和IE中那些令人毛骨悚然的大标题需要几分钟才能加载.

Chrome注意事项: 整个HTTP标头的实际限制似乎为256KB.出现错误消息:"错误325(net :: ERR_RESPONSE_HEADERS_TOO_BIG):未知错误."

Firefox注意事项: 当通过多个标头发送数据时,100MB工作正常,只需拆分超过10'000个标头.

我的结论:如果你想支持所有流行的浏览器,每个标头10KB似乎是限制,所有标题一起256KB.

我的PHP代码用于生成这些响应:

<?php

ini_set('memory_limit', '1024M');
set_time_limit(90);
$header = "";

$bytes = 256000;

for($i=0;$i<$bytes;$i++) {
    $header .= "1";
}

header("MyData: ".$header);
/* Firfox multiple headers
for($i=1;$i<1000;$i++) {
    header("MyData".$i.": ".$header);
}*/

echo "Length of header: ".($bytes / 1024).' kilobytes';

?>
Run Code Online (Sandbox Code Playgroud)


Jon*_*nna 8

在实践中,虽然有规则禁止代理不传递某些标题(事实上,非常明确的规则可以修改,甚至如何通知代理是否可以修改由以后的标准添加的新标题),这只是适用于"透明"代理,并非所有代理都是透明的.特别是,一些擦除标题,他们不理解为故意的安全实践.

此外,在实践中,有些人行为不端(虽然事情比他们好得多).

因此,除了明显的核心标头之外,您可以依赖于从服务器传递到客户端的标头信息量为零.

这只是为什么你永远不要依赖于头文件使用得好的原因之一(例如,为客户端重复请求它应该缓存的东西,或者服务器在你请求范围时发送整个实体)除非明显的认证标题(在无法保证的原则下).