答案 0 :(得分:40)
简答:
相同的行为:否
热门浏览器中的最低限制:
运行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';
?>
答案 1 :(得分:8)
在实践中,虽然有规则禁止代理不传递某些标题(实际上,非常明确的规则可以修改,甚至如何通知代理是否可以修改由以后的标准添加的新标题) ,这仅适用于“透明”代理,并非所有代理都是透明的。特别是,一些擦除标题,他们不理解为故意的安全实践。
另外,在实践中,有些人行为不端(虽然事情比他们好得多)。
因此,除了明显的核心标题之外,您可以依赖从服务器传递到客户端的标头信息量为零。
这只是为什么你永远不应该依赖于标题使用得好的原因之一(例如,为客户端重复请求它应该缓存的东西,或者服务器在你发送整个实体时请求范围),除非明显的认证标题(在无法保证的原则下)。
答案 2 :(得分:4)
两件事。
首先,为什么不运行一个测试,让浏览器逐渐增大和扩大标题,并等到它达到一个不起作用的数字?只需在每个浏览器中运行一次。这是解决这个问题的最可靠方法。即使它并不完全全面,你至少还有一些实用的数字,这些数字可能会覆盖绝大多数用户。
其次,我同意所有人的意见,这是一个坏主意。如果你真的关心达到极限,那么找到一个不同的解决方案应该不难。即使您在每个浏览器上进行测试,仍然需要担心防火墙等,并且绝对没有办法测试每个组合(我几乎肯定没有其他人在您之前做过此操作) 。对于每个案例,你都无法获得硬性限制。
虽然理论上,但这一切都应该可以正常进行,如果你决定这样做,可能会有一个边缘案例会让你陷入困境。
TL; DR:这是一个坏主意。省去麻烦并找到真正的解决方案,而不是解决方法。
编辑:由于您提到请求可能来自多种类型的来源,为什么不在请求标头中指定源并将数据完全包含在正文中?标头中有某种Source
或ClientType
字段,用于指定请求的来源。如果它来自浏览器,请在正文中包含HTML;如果它来自PHP应用程序,请在其中放置一些特定于PHP的内容;等等。如果该字段为空,则根本不添加任何额外数据。
答案 3 :(得分:2)
答案 4 :(得分:1)
理论上,可以在浏览器中发送的数据量没有限制。这几乎就像是说网页正文中的内容数量有限。
如果可能,尝试通过文档正文传输数据。为了安全起见,请考虑将数据拆分,以便有多个加载过程。