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