考虑一个最小的例子:使用 php 我有一个输入文本的表单,它会生成文本的图像。然后当我更改文本并更新时,我看不到新图像,因为我假设它正在被缓存。当我更新它时,是否有某种方法可以自动从缓存中删除这个图像文件?
4 回答
这通常通过向查询添加随机字符串或时间戳来处理。
IE<img src="/images/image.jpg?timestamp=1357571065" />
典型的解决方案是 ceejazoz 在这个答案中给出的:添加一个额外的时间戳作为请求参数。这样 url 每次都不同,因此没有缓存或代理将提供缓存版本。
但是,尽管这可行,但它是一个丑陋的解决方法。
干净的解决方案是在交付图像时指定标头。这些标头注意不缓存图像。这就是标题的用途:定义资源的使用方式。缺点:当今用于传递静态图像的 http 服务器的开箱即用配置不提供指定此类标头。因为在 99,99% 的情况下,这是没有意义的。所以你必须编写一个自己的机制。难度不大,但还是很努力。使用上述解决方法当然更容易,也更少麻烦。
并准确回答您的实际问题:从单个缓存对象中清除“缓存”通常是不可能的。尽管这实际上取决于您正在谈论的缓存。如果它只是您开发(测试)时的浏览器缓存,那么只需进行“深度重新加载”(类似于 CTRL-SHIFT-R 或 CTRL-F5,具体取决于您的浏览器)。但这会清除当前页面的所有缓存对象。没有简单的方法来清除服务器端缓存甚至中间的代理。
向可能包含朱利安时间 + 一个随机数的图像添加查询字符串,例如,您的图像 URL 变为://.../myimage.jpg?112233445566-954967254
您可以重新验证缓存
header("Cache-Control: no-cache, must-revalidate");