【问题标题】:302 image redirects slower in browsers302 图像在浏览器中重定向较慢
【发布时间】:2016-01-27 23:34:39
【问题描述】:

我在 WAMP 堆栈上,下面一行代码用于 demo.html

<img src="http://localhost/redirect/demo.php"></img>

demo.php代码如下

<?php
header("Location: http://localhost/redirect/blah");
exit();
?>

代码运行良好。但响应时间很长在内容下载期间

当我将 demo.html 更改为使用 script 标签与 img 标签时,在响应时间没有问题

<script src="http://localhost/redirect/demo.php"></script>

不知道为什么 IMG 标签会发生这种情况。谁能解释为什么会发生这种情况以及如何避免这种情况?是否有任何替代方法可以在没有 javascript 解决方案的情况下通过 302 加载 IMG。

注意 - 相信这不是 PHP/WAMP 问题,因为当我直接调用 http://localhost/redirect/demo.php 时响应时间不会受到影响。相信这与浏览器、它的渲染、它的加载事件有关。

【问题讨论】:

  • 现代浏览器在脚本方面更加智能。它们会同时加载脚本。同时,HTML 将以自上而下的方式加载,并在获取图像后显示 img 标签。 @Vivek 是对的,脚本是同步加载的,而图像是排队和异步加载的。

标签: php html image redirect browser


【解决方案1】:

如果我没记错的话,脚本是同步加载的,而图像是排队和异步加载的。

所以我的理解是,如果您使用 script 标签,浏览器会等待加载发送 302 的 http://localhost/redirect/demo.php。这会强制浏览器在加载其他内容之前执行 http://localhost/redirect/blah

如果您使用 img 标签,浏览器会执行http://localhost/redirect/demo.php 并继续加载页面的剩余部分。当 demo.php 返回 302 时,http://localhost/redirect/blah 被添加到要加载的 URL 队列中。因此加载图像的总时间更长。

不确定是否可以避免。可能,在 demo.php 上启用缓存可能有助于后续请求。

【讨论】:

    【解决方案2】:

    根据您的图像重定向的使用情况,您可以查看URL Rewriting

    我不确定这是一个好的解决方案,因为您的示例代码与上下文无关。

    您也可以看看这个问题,它可以为您提供更多信息:Is it OK to HTTP redirect images?

    【讨论】:

      【解决方案3】:

      使用 .htaccess:

      RewriteEngine on
      RewriteRule ^redirect/demo.php$ /redirect/blah [QSA,L]
      

      最终,如果您想在另一台服务器上拥有“blah”文件/脚本,您可以使用反向代理,请参阅:https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension

      【讨论】:

        猜你喜欢
        • 2012-08-26
        • 2015-05-09
        • 2013-10-10
        • 1970-01-01
        • 2013-12-26
        • 1970-01-01
        • 2011-10-03
        • 2020-12-27
        • 1970-01-01
        相关资源
        最近更新 更多