HoL*_*ieR 17 browser ajax http-headers
我正在构建一个使用HTTP Content和HTTP Header来发送和接收数据的AJAX应用程序.是否有一个点,从HTTP头接收的数据将不会被浏览器读取,因为它太大了?如果是,那么限制是什么,并且它在所有浏览器中都是相同的行为?
我知道理论上对HTTP标头的大小没有限制,但实际上有什么意义,我可能在某些平台,浏览器或客户端计算机或机器上安装的某些软件下遇到问题.我更关注使用HTTP标头的安全实践指南.换句话说,在没有潜在问题进入线路的情况下,HTTP标头可用于传输其他数据的范围是多少?
谢谢,关于这个问题的所有输入,非常感谢和有趣.托马斯的回答得到了赏金,但Jon Hanna的回答提出了一个关于代理的非常好的观点.
Tho*_*mas 42
简短的答案:
相同的行为:没有
流行浏览器中的最低限制:
运行Mac OS X 10.6.4的MacBook测试结果:
成功加载最大响应,所有数据都在一个标题中:
注意 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)
在实践中,虽然有规则禁止代理不传递某些标题(事实上,非常明确的规则可以修改,甚至如何通知代理是否可以修改由以后的标准添加的新标题),这只是适用于"透明"代理,并非所有代理都是透明的.特别是,一些擦除标题,他们不理解为故意的安全实践.
此外,在实践中,有些人行为不端(虽然事情比他们好得多).
因此,除了明显的核心标头之外,您可以依赖于从服务器传递到客户端的标头信息量为零.
这只是为什么你永远不要依赖于头文件使用得好的原因之一(例如,为客户端重复请求它应该缓存的东西,或者服务器在你请求范围时发送整个实体)除非明显的认证标题(在无法保证的原则下).