强制浏览器重新缓存图片上的图像

时间:2018-03-08 22:52:46

标签: php html apache caching

我有缩略图PHP脚本重新制作缩略图。一切正常,直到加载缩略图,浏览器无法从服务器重新加载图像并显示旧缩略图。我试过以下技巧:

  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  header("Cache-Control: no-store, no-cache, must-revalidate");
  header("Cache-Control: post-check=0, pre-check=0", false);
  header("Pragma: no-cache");

以及meta标签:

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="Expires" content="Tue,01 Dec 1990 06:30:00 GMT">

问题是,我做错了什么还是有另一种方法?我知道要添加&#34;?randomnumber&#34;技巧到图像的结尾。但是,我真的不想使用它,因为它意味着浏览器缓存大量图像以及使事情看起来很混乱。而且我没有办法可靠地获取缩略图编辑日期。

3 个答案:

答案 0 :(得分:1)

缓存对您发送的标头以及响应进行操作,如果缓存已经有一个资源副本,说明其标题表明它未过期,那么它没有理由查看上游而没有任何数量的后续回复的标题将改变这一点。

这就是HTTP的工作原理。

如果您想要显示新版本的缩略图,您可以:

  1. 只发送足够小的缓存标题,以免你像这样在脚下射击。
  2. 发送明确禁用缓存的标头。
  3. 内容更改时更改文件名。
  4. 将缓存中断数据附加到网址,即img.jpg?t={$file_modification_timestamp}
  5. 这是您的选项的完整列表,无论您找到它们的吸引力如何。

答案 1 :(得分:-1)

当我需要清除缓存时,我偶尔会部署一种低技术-html-php方法。在图像标签src上抛出一个查询字符串! 如果通过回显一个随机数使查询字符串随机,它将每次都破坏该图像的缓存。

    <img src="/images/logo.png?v=<?=rand(1, 10)?>" border="0">

Query Stringed Image

答案 2 :(得分:-2)

试试这个:

image.jpg?foo=20180308136060 //year, month, day, hours, minute and seconds