我正在开发某种带有沉重图像的着陆页。 我使用web.config中的以下代码
在客户端缓存了图像<staticContent>
<clientCache httpExpires="Sun, 29 Mar 2020 00:00:00 GMT" cacheControlMode="UseExpires"/>
</staticContent>
有时,用户正在裁剪或重新调整图片大小,但浏览器仍会显示缓存的图片。 有什么办法,我可以强制告诉你服务器上的图像被更改了,所有浏览器都应该刷新缓存。
我想我需要使用LastModified HTTP标头,但我不知道如何在ASP .NET MVC中将此标头设置为静态图像
答案 0 :(得分:3)
客户端缓存的全部意义是在一段确定的时间内不再检查新版本。从这个意义上讲,添加最后修改的标头对您没有帮助,因为浏览器不会请求文件获取该标头。通常,处理静态资源的方法是设置远期的未来期限,以便资源将无限期地缓存在客户端附近,然后在有新版本时以某种方式更改资源名称。如果资源名称发生更改,则浏览器将自动再次获取它,因为它没有具有该名称的资源。
我不确定您的用户是如何做的,但如果您正在裁剪或调整图片大小,通常会同时为图片添加新名称。例如,原作可能是original.jpg
,200x200作物可能是original_200x200.jpg
等。
除此之外,您可以使用缓存清除查询字符串来强制浏览器重新请求资源。简单地做一些事情,比如将最后修改日期作为时间戳附加,通常非常有效。例如,您可以将其引用为image.jpg
,而不是将图片引用为image.jpg?1416417459
。修改映像后,时间戳将不同,浏览器将其视为全新资源。