我一直在四处寻找,以解决我的网站上需要最新版本文件的部分的缓存问题。该文件是用户可以上传的背景图像。它使用一个表单将图像上传到服务器上的某个文件夹。每次加载用户的页面时,php脚本都会将CSS回声到页面的head标记中。
我知道一些技巧,比如在图像的src属性中,在源文件的末尾添加一个随机字符串或时间戳。然而,在我的例子中没有img标记。背景图像通过css应用于包装器div:
#wrapper{
background-image:url('dir/imagename.jpg');
}
在停止浏览器缓存方面,我尝试了以下操作:
<meta Http-Equiv="Cache-Control" Content="no-cache">
<meta Http-Equiv="Pragma" Content="no-cache">
<meta Http-Equiv="Expires" Content="0">
<meta Http-Equiv="Pragma-directive: no-cache">
<meta Http-Equiv="Cache-directive: no-cache">
该代码已添加到页面的head标记中。
我也尝试过用php:
header("Expires: Tue, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
即使在所有这些更改之后,我也必须刷新页面至少十几次才能更新图像。当通过ftp客户端或内置文件管理器下载图像时,我可以看到图像已经立即更新。因此,我得出结论,浏览器(谷歌浏览器)正在缓存这些图像,我似乎无法中断或阻止这个过程。
有什么想法吗?
您需要"取消缓存"静态资产,如图像、CSS和JavaScript。我不知道你是怎么发送这些邮件的,因为它们不是那样工作的。使用.htaccess
添加此规则来告诉浏览器不要缓存.jpg
、.jpeg
、.png
、.gif
:
<FilesMatch "'.(jpg|jpeg|png|gif)$">
Header set Expires "Tue, 01 Jan 2000 00:00:00 GMT"
</FilesMatch>