浏览器缓存在重建时重置

时间:2013-02-19 08:06:24

标签: c# asp.net asp.net-mvc-4 browser-cache

我有一个控制器动作,可以从数据库中返回图像。这些图像是静态的,它们永远不会更改,只有它们“改变”的时间才是为图像元素分配新ID。

我已经分配了

[OutputCache(CacheProfile = "ProductImages", Duration = 36000000)]

采取行动,

<add name="ProductImages" enabled="true" duration="600000" varyByCustom="ProductImages" varyByParam="" />

在web.config-&gt; system.web-&gt; caching-&gt; outputcacheSettings-&gt; outputCacheProfiles和

<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />

在system.webserver-&gt; staticContent。

我构建它,刷新页面,获取图像。我再次刷新页面,图像从缓存中获取。但是,当我更改一行代码时,重建,再次刷新...所有图像都从数据库中重新获取。不仅数以千计的图像存储在数据库中,而且它将部署在Windows Azure中,因此优化非常重要。

请注意,标准的“静态内容”仍然是高速缓存的,例如Site.css和JQuery.js。但是,图像不是什么。

图像访问URL始终是静态的,以形式出现 〜/媒体/图像/ 1a00d817-6525-4d13-82bc-d0f24d26f29c

我不知道如何修复它,因为虽然它在开发期间是可以容忍的,但如果每次我重新部署到Azure时,每个人的图像缓存都会被重置...... 颤抖

欢迎提出意见!

编辑:

我也尝试在网址末尾添加扩展名(如.jpg),因此浏览器会将其视为静态内容,并添加了

<add extension=".jpg" policy="CacheForTimePeriod" kernelCachePolicy="CacheForTimePeriod" location="Client" duration="365.00:00:00"/>

到system.webserver-&gt; caching-&gt;个人资料,但无济于事。

启用了darin建议的标题(始终重新请求):

Cache-Control:private, max-age=600000
Content-Length:4593
Content-Type:image/jpeg
Date:Tue, 19 Feb 2013 08:55:27 GMT
Expires:Tue, 26 Feb 2013 07:35:26 GMT
Last-Modified:Tue, 19 Feb 2013 08:55:26 GMT
Server:Microsoft-IIS/8.0
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:4.0
X-Powered-By:ASP.NET

带位置=“任意”的标题(仅在重建时重新请求):

Cache-Control:public, max-age=600000
Content-Length:21461
Content-Type:image/jpeg
Date:Tue, 19 Feb 2013 08:57:03 GMT
Expires:Tue, 26 Feb 2013 07:37:03 GMT
Last-Modified:Tue, 19 Feb 2013 08:57:03 GMT
Server:Microsoft-IIS/8.0
Vary:*
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:4.0
X-Powered-By:ASP.NET

1 个答案:

答案 0 :(得分:0)

您可以将它们缓存在客户端上,以避免每次都命中服务器:

<add 
    name="ProductImages" 
    enabled="true" 
    duration="600000" 
    varyByCustom="ProductImages" 
    varyByParam="" 
    location="Client" 
/>