【问题标题】:How do I stop Firefox from closing my streaming jQuery ajax response?如何阻止 Firefox 关闭我的流式 jQuery ajax 响应?
【发布时间】:2011-04-22 22:03:34
【问题描述】:

我对@9​​87654321@-esque 请求有点陌生,所以如果我为自己做的工作太多并且应该使用库或其他方法,请说出来。

基本上这是我的情况:我有一个页面将<iframe> 元素的src 属性设置为 脚本。 PHP 脚本使用以下标头流式传输响应:

Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: multipart/x-mixed-replace

这在 中很有名!但是, 会在几秒钟后关闭连接。我该如何解决?我已经检查了两个浏览器的脚本响应,其他方面的响应是相同的(直到 Firefox 关闭连接为止。)

很棒的更新:Firefox 讨厌“Content-Type: multipart/x-mixed-replace”。一旦删除它,它就可以在 Firefox 中使用。

难道没有更好的方法来做这种事情吗?

【问题讨论】:

  • 如果您找到了可行的解决方案,您应该回答您自己的问题,并接受答案。 :)
  • 是的,因为现在我每次看到没有答案的时候都会看到这个该死的问题......
  • 耐心,耐心,小伙子们。我完全打算接受我自己的答案。我希望在这样做之前让人们有机会为咒语提供更好的解决方案。
  • 我真的认为没有必要投反对票。这简直是​​愚蠢的。

标签: comet php safari firefox php jquery ajax streaming comet


【解决方案1】:

这里的解决方案是将Content-Type: multipart/x-mixed-replace 发送到 Safari 而不是 Firefox。

由于我不完全理解的原因,如果响应中存在此标头,Firefox 将在几秒钟后断开与服务器的连接。否则 Firefox 会很好地处理流式响应。

为了实现这一点,我只是在代码中添加了对用户代理的检查:


if( preg_match("/Safari/", $_SERVER["HTTP_USER_AGENT"]) )  
    header("Content-Type: multipart/x-mixed-replace");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 2012-02-03
    相关资源
    最近更新 更多