【发布时间】:2013-08-16 03:51:47
【问题描述】:
我实现了一个系统来编辑网站上显示的图像。
当图像被编辑时,我想在网站的所有页面(它被调用的地方)上显示它的最新版本,至少对于编辑图像的用户来说是这样。
现在我正在寻找一种比在末尾添加时间戳更好的方法来清除特定图像的缓存:
<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) 重新加载它,如果你现在有办法改变缓存头?
所以我想要的是清除被编辑的特定图像的缓存头,考虑到我的项目的限制,所以如果可能的话通过使用缓存指令而不从控制器提供图像,这可能吗?
【问题讨论】: