在ASP .NET MVC中动态缓存图像

时间:2014-11-19 16:58:27

标签: asp.net-mvc caching last-modified

我正在开发某种带有沉重图像的着陆页。 我使用web.config中的以下代码

在客户端缓存了图像
<staticContent>
  <clientCache httpExpires="Sun, 29 Mar 2020 00:00:00 GMT" cacheControlMode="UseExpires"/>
</staticContent>

有时,用户正在裁剪或重新调整图片大小,但浏览器仍会显示缓存的图片。 有什么办法,我可以强制告诉你服务器上的图像被更改了,所有浏览器都应该刷新缓存。

我想我需要使用LastModified HTTP标头,但我不知道如何在ASP .NET MVC中将此标头设置为静态图像

1 个答案:

答案 0 :(得分:3)

客户端缓存的全部意义是在一段确定的时间内不再检查新版本。从这个意义上讲,添加最后修改的标头对您没有帮助,因为浏览器不会请求文件获取该标头。通常,处理静态资源的方法是设置远期的未来期限,以便资源将无限期地缓存在客户端附近,然后在有新版本时以某种方式更改资源名称。如果资源名称发生更改,则浏览器将自动再次获取它,因为它没有具有该名称的资源。

我不确定您的用户是如何做的,但如果您正在裁剪或调整图片大小,通常会同时为图片添加新名称。例如,原作可能是original.jpg,200x200作物可能是original_200x200.jpg等。

除此之外,您可以使用缓存清除查询字符串来强制浏览器重新请求资源。简单地做一些事情,比如将最后修改日期作为时间戳附加,通常非常有效。例如,您可以将其引用为image.jpg,而不是将图片引用为image.jpg?1416417459。修改映像后,时间戳将不同,浏览器将其视为全新资源。