我在一个WAMP堆栈上,并拥有demo.html
<img src="http://localhost/redirect/demo.php"></img>
demo.php
代码如下
<?php
header("Location: http://localhost/redirect/blah");
exit();
?>
当我将demo.html
更改为使用脚本代码与img标记时,在响应时间内没有问题
<script src="http://localhost/redirect/demo.php"></script>
不确定为什么IMG标签会发生这种情况。任何人都可以解释为什么会发生这种情况,我该如何避免这种情况?有没有其他方法可以在没有javascript解决方案的情况下通过302加载IMG。
注意 - 相信这不是PHP / WAMP问题,因为当我直接调用 http://localhost/redirect/demo.php
时,响应时间不受影响。相信这与浏览器,它的渲染,它的加载事件有关。
答案 0 :(得分:2)
如果我没错,脚本会同步加载,而图像会异步排队和加载。
所以我的理解是,如果您使用脚本标记,浏览器会等待加载发送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上启用缓存有助于后续请求。
答案 1 :(得分:0)
根据图片重定向的使用情况,您可以查看URL Rewriting。
我不确定这是一个很好的解决方案,因为您的示例代码不在上下文中。
您还可以查看此问题,该问题可为您提供其他信息:Is it OK to HTTP redirect images?
答案 2 :(得分:0)
使用.htaccess:
RewriteEngine on
RewriteRule ^redirect/demo.php$ /redirect/blah [QSA,L]
如果你想拥有&#34; blah&#34;您可以使用反向代理的其他服务器上的文件/脚本请参阅:https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension