0

我实现了一个系统来编辑网站上显示的图像。

编辑图像时,我想在站点的所有页面(调用它的位置)上显示其最新版本,至少对于编辑图像的用户而言。

现在我正在寻找一种更好的方法来清除特定图像的缓存,而不是在末尾添加时间戳:

<img src="myimage.jpg?01215654" alt="" />

为什么 ?

它假设总是在图像路径的末尾添加时间戳,例如会话系统。

但是当会话过期时(例如,用户离开站点,几个小时后返回),图像的真实路径就会显示出来:

<img src="myimage.jpg" alt="" />

并且导航器随机显示旧图像,或最后一个版本...因为 Apache 缓存:

  • myimage.jpg 作为旧图像
  • myimage.jpg?01215654 作为新版本,因为之前没有人点击它(作为新媒体加载)

限制

  • 我无法更改已编辑图像的路径,例如“myimage.jpg”到“myimage-v2.jpg”,这可以解决问题...
  • 图像不是从控制器提供的(不是从 PHP 脚本提供的),它们是从服务器上的路径直接加载的。
  • 我不想使用在带有 JS 的图像路径末尾添加时间戳或版本字符串的会话系统。

我想要的是

我想说“myimage.jpg”的缓存已经过期,所以显示上一个版本,然后正常缓存,直到下一个版本。所以我想在编辑后加载“200状态”的图像,而不是“304修改”。

注意:编辑图像时,如果您现在可以更改缓存标头,我会在隐藏的 div 中使用 JS (JQuery) 重新加载它?

所以我想要的是清除被编辑的特定图像的缓存头,考虑到我的项目的限制,所以如果可能的话通过使用缓存指令而不从控制器提供图像,这可能吗?

4

1 回答 1

0

这整个问题非常混乱。

阿帕奇缓存?...不,缓存在您的浏览器中,而不是在 Apache 中。

向图像 URL 添加时间戳的会话?...不,必须使用服务器端脚本(例如 PHP)将带有时间戳的查询字符串添加到 HTML 中。它与浏览器会话无关。(实际上,使用文件最后修改时间而不是当前时间戳,顺便说一句,通常要好得多)。

有多种方法可以达到您想要的效果,每种方法都有自己的优点和缺点,具体取决于您的情况。您可能想在这里阅读我的回答。

于 2014-03-15T21:55:27.153 回答