我在网站上有一张图片,不想被缓存。这张图片作为CSS背景使用,所以无法动态更改其名称。有什么好的方法吗?
我在网站上有一张图片,不想被缓存。这张图片作为CSS背景使用,所以无法动态更改其名称。有什么好的方法吗?
<img src="/path/to/image/image.jpg?<?php echo time(); ?>/>
这样可以确保每次显示页面时重新加载图像。
image.jpg#random
,但也没有用。 - East of Nowhere使用Apache,您可以通过两种不同的方式实现此目标:
方法一:使用mod_headers模块:
<FilesMatch "\.(png|jpg|jpeg|jpeg)$">
Header set Expires "Fri, 04 Aug 1978 12:00:00 GMT"
Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</FilesMatch>
或者使用mod_expires:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/png A0
ExpiresByType image/gif A0
ExpiresByType image/jpg A0
ExpiresByType image/jpeg A0
</IfModule>
mnot有一个很好的缓存教程,可以解释如何设置HTTP头来请求不缓存图像(请记住,您需要为图像设置HTTP头,而不是HTML文档)。
然而,这可能不是一个好主意,因为图像往往相对较大,所以为每个页面重新下载它可能会导致显着的性能下降。
<Files
指令的部分),您可以通过PHP脚本传递图像,并在那里设置自己的(不)缓存标头:<?php
header('Cache-Control: no-cache');
header('Expires: 0');
header('Content-Type: image/jpeg'); // or whatever your image is
readfile('/some/path/to/yourfile.jpg');
?>
这个方法应该能够得到一个完全没有缓存的图片;重点是应该,因为不同的浏览器有不同的问题(如果我没记错的话,IE6在作为背景图片链接时仍然会缓存它,但幸运的是这种情况正在逐渐消失)。
请注意,这种简单的方法会导致1)服务器负载增加,因为它需要为图片请求启动PHP,2)禁用脚本/图片的部分下载。
如果你的目标是现代浏览器,你可以使用HTML5清单文件:http://diveintohtml5.ep.io/offline.html#network