代码之家  ›  专栏  ›  技术社区  ›  HoLyVieR

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

  •  16
  • HoLyVieR  · 技术社区  · 14 年前

    我正在构建一个AJAX应用程序,它使用HTTP内容和HTTP头来发送和接收数据。从HTTP头接收的数据是否会因为太大而不被浏览器读取?如果是,限制是什么?在所有浏览器中的行为是否相同?

    我知道理论上HTTP头的大小没有限制,但是 实践 什么是点,过去,我可能有问题,在某些平台,浏览器或与某些软件安装在客户端计算机或机器上。我更深入地研究了使用HTTP头的安全实践指南。换言之,HTTP报头最多可以用于传输额外的数据,而不会出现潜在的问题?


    谢谢,对于所有关于这个问题的意见,这是非常感谢和有趣的。托马斯得到了赏金,但是 Jon Hanna's answer 提出了一个关于代理的很好的观点。

    5 回复  |  直到 7 年前
        1
  •  8
  •   Jon Hanna    14 年前

    在实践中,虽然有一些规则禁止代理不传递某些头(事实上,非常明确的规则可以修改,甚至如何通知代理是否可以修改由更高标准添加的新头),但这只适用于“透明”代理,并不是所有代理都是透明的。特别是,一些他们不理解的安全措施。

    而且,在实践中,有些人确实行为不端(尽管情况比以前好多了)。

    这正是为什么您永远不应该依赖于标头的良好使用的原因之一(例如,准备好让客户端重复对它本应缓存的内容的请求,或者在您请求一个范围时让服务器发送整个实体),除非存在明显的身份验证标头(根据fail-to-secure原则)。

        2
  •  44
  •   Thomas    14 年前

    简短回答:

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

    • 每头10KB

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

    已成功加载最大响应,所有数据位于一个标头中:

    • Safari 5:20MB
    • Chrome 5:250KB

    注意 Opera、Safari和IE中那些离谱的大标题需要几分钟才能加载。

    Chrome注意: 整个HTTP头的实际限制似乎是256KB。 出现错误消息:“Error 325(net::ERR\u RESPONSE\u HEADERS\u TOO\u BIG):未知错误。”

    我的结论是:

    我的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';
    
    ?>
    
        3
  •  4
  •   Sasha Chedygov    14 年前

    首先,为什么不直接运行一个测试,让浏览器的标题越来越大,然后等到它碰到一个不起作用的数字?只需在每个浏览器中运行一次。这是最可靠的解决办法。即使它不是完全全面的,你至少有一些实际的数字,这些数字将可能涵盖你的用户的绝大多数。

    不过 理论上

    省去你自己的麻烦,找到一个真正的解决方案,而不是一个解决办法。


    编辑: Source ClientType 标头中指定请求来自何处的字段。如果它来自浏览器,在正文中包含HTML;如果它来自于一个PHP应用程序,那么把一些特定于PHP的东西放进去;如果字段为空,则根本不添加任何额外数据。

        4
  •  2
  •   grg    4 年前

    HTTP/1.1的RFC显然没有限制头或正文的长度。

    非常 长URI: https://web.archive.org/web/20191019132547/https://boutell.com/newfaq/misc/urllength.html

        5
  •  1
  •   Kranu    14 年前

    从理论上讲,在浏览器中可以发送的数据量没有限制。这几乎就像说网页正文中的内容量是有限制的。