有没有办法强制浏览器刷新/下载图像?

uri*_*ium 42 html browser image-caching browser-cache

我有一个问题,用户报告他们的图像没有上传,旧图像仍在那里.仔细观察后,新图像就在那里,它们与旧图像的名称相同.我在上传时做的是我为了SEO目的重命名图像.当他们删除图像时,旧索引变为可用并被重用.因此它具有相同的图像名称.

有没有办法(我想可能有一个元标记)告诉浏览器不使用它的cahce?

更好的答案是将图像重命名为全新的.我将继续努力,但同时我在处理更大的问题时是快速的解决方案.

kni*_*ttl 117

附加具有任意唯一编号(或时间或版本号等)的查询字符串:

<img src="image.png?80172489074" alt="a cool image" />
Run Code Online (Sandbox Code Playgroud)

由于URL不同,这将导致新请求.

  • Gubmo,唯一有点太多,在这种情况下最好的是添加文件的mtime - 这样它只会在需要时重新加载. (10认同)
  • +1,但严格来说它不是不同的文件名;-)文件名组件是相同的,但URL肯定是不同的. (2认同)
  • 最好的方法是使用该版本的版本号. (2认同)

ndp*_*ndp 21

这很难.您真的希望缓存图像,但是一旦新的可用,您就不希望缓存它们:

  • 使用过去日期的过期标头可防止任何缓存.坏
  • 添加"缓存清除"参数?342038402可以解决问题,但也可以防止图像被缓存,这不是你想要的.坏.
  • 使用expires标头(简称1小时)到期更好......一小时后用户将看到图像,但您的Web服务器不必每次都提供服务.妥协,但什么时间有效?不太可行.

解决方案?我可以想到两个不错的选择:

  • 查看eTags以及您使用它们的能力.这些是针对这种情况而设计的.浏览器将明确询问您的服务器文件是否是最新的.你可以在apache中打开它,如果你没有它.
  • 为每个新图像创建一个新URL(并使用远期过期标头).这就是你正在做的事情.

  • @ChadMizner如果使用PHP,您可以将PHP的[`filemtime(string $ filename)`](http://php.net/manual/en/function.filemtime.php)函数与"cache busting"参数结合使用.这样,该文件的URL每次都会更改,请求的文件也会更改.(致Michael Krelin - 黑客). (2认同)

Gia*_*nis 7

我最喜欢的 PHP 解决方案:

<img src="<?php echo "image.jpg" . "?v=" . filemtime("image.jpg"); ?>" />
Run Code Online (Sandbox Code Playgroud)

每次更改文件都会“创建”一个新版本的文件


Rob*_*ers 5

将当前日期时间附加到图像 src:

<img src="yourImage.png?v=<?php echo Date("Y.m.d.G.i.s")?>" />
Run Code Online (Sandbox Code Playgroud)

  • 您也可以关闭缓存,因为您的示例将强制浏览器每次下载文件(因为时间戳会每秒更改)。我建议在最后删除 i 和 s,这样时间戳每小时都会变化。这样浏览器每小时只会下载一次图像。“YmdG” (2认同)