【问题标题】:Dynamically cache images in ASP .NET MVC在 ASP .NET MVC 中动态缓存图像
【发布时间】:2014-11-19 16:58:26
【问题描述】:

我正在开发某种带有大量图片的着陆页。 我已经使用 web.config 中的以下代码在客户端缓存了图像

<staticContent>
  <clientCache httpExpires="Sun, 29 Mar 2020 00:00:00 GMT" cacheControlMode="UseExpires"/>
</staticContent>

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

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

【问题讨论】:

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


    【解决方案1】:

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

    我不确定您的用户是如何操作的,但如果您要裁剪或调整图像大小,通常会同时为图像指定一个新名称。例如,原始可能是original.jpg,200x200 的裁剪可能是original_200x200.jpg,等等。

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

    【讨论】:

    • 感谢克里斯的精彩回答
    猜你喜欢
    • 2016-03-30
    • 2016-01-28
    • 2011-04-19
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2011-12-27
    • 2021-03-27
    相关资源
    最近更新 更多