【发布时间】:2013-07-23 16:03:10
【问题描述】:
我们最近开始将一些 ASP.NET MVC 网站从我们自己的托管环境迁移到 Azure。我们看到的问题之一是客户端缓存在交付动态创建的内容时似乎无法正常工作。具体来说,代码中添加到 HTTP 响应的缓存相关标头被剥离。
例如,在旧环境中返回以下标头,以告知客户端内容可能被缓存:
Cache-Control: public, max-age=31533144
Content-Disposition: attachment; filename=picture.png
Content-Length: 64326
Content-Type: image/png
Date: Tue, 23 Jul 2013 15:44:57 GMT
Etag: "845D3DD630A7AEF5B68EA7A09B670A4D"
Expires: Fri, 23 Aug 2013 14:57:22 GMT
Last-Modified: Tue, 23 Jul 2013 14:57:22 GMT
Server: Microsoft-IIS/7.5
但在 Azure 上,会返回以下标头:
Content-Disposition: attachment; filename=picture.png
Content-Length: 64326
Content-Type: image/png
Date: Tue, 23 Jul 2013 15:44:57 GMT
Server: Microsoft-IIS/8.0
X-Powered-By: ARR/2.5, ASP.NET
如您所见,Cache-Control、Etag、Expires 和 Last-Modified 标头已被删除。
我看到了一些关于缓存静态内容的建议,但我认为这些建议在这种情况下不会有所帮助。 Azure CDN 的结构是否会以这种方式阻止缓存?是否应该改用 Azure blob?是否有可能被忽略的基本配置更改?
提前致谢
【问题讨论】:
-
我也有同样的问题。设置标头(例如 Response.Cache.SetExpires)在本地工作,但在部署时会被剥离...
-
我不确定,但根据这篇 msdn 文章 msdn.microsoft.com/en-us/library/windowsazure/gg680299.aspx '如果您想以编程方式缓存应用程序内容,请确保通过将 HttpCacheability 设置为 Public 将内容标记为可缓存。'跨度>
-
嘿,这样我可以更好地理解 - 您使用的是 Azure 网站还是 Azure VM?另外,您如何配置 HTTP 缓存?在 web.config 中,通过 IIS,以编程方式 (OutputCache)?
-
在以前的环境中添加缺失标签的设置在哪里?他们是自动添加的(你没有手动设置这个标题)?通过 HttpModules?通过 IIS 设置?
-
@WolfyUK - 你解决过这个问题吗?
标签: asp.net-mvc caching iis azure