如何防止浏览器缓存图像?

时间:2011-05-16 09:37:39

标签: php html css

我的网站上有一张我不想要缓存的图片。该图像用作CSS中的背景,因此我无法动态更改其名称。有什么想法吗?

5 个答案:

答案 0 :(得分:8)

另一种方法是在图像文件后添加随机字符串。

<img src="/path/to/image/image.jpg?<?php echo time(); ?>/>

这应确保每次显示页面时都重新加载图像。

答案 1 :(得分:3)

mnot has a good caching tutorial将解释如何设置HTTP标头以请求不缓存图像(请记住,您需要为图像设置HTTP标头,而不是HTML文档)。

这可能是一个坏主意,但因为图像往往相对较粗,所以对每个页面重新加载它可能会使性能显着降低。

答案 2 :(得分:3)

使用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>

答案 3 :(得分:2)

如果您无法在Apache上设置缓存规则(如@David Dorvard的回答所示 - 请参阅使用<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');
?>

这个应该为你提供一个根本没有缓存的图像;强调应该,因为各种浏览器都被各种各样的打破(IIRC IE6无论如何当它作为背景图像链接时缓存它,但幸运的是它正在出路)。

请注意,这种简单的方法将1)增加服务器上的负载,因为它需要为图像请求启动PHP并且2)禁用脚本/图像上的部分下载

答案 4 :(得分:1)

如果您定位现代浏览器,则可以使用HTML5清单文件:http://diveintohtml5.ep.io/offline.html#network