Azure托管的ASP.NET MVC站点删除与客户端缓存相关的HTTP标头

时间:2013-07-23 16:03:10

标签: asp.net-mvc caching iis azure

我们最近开始将一些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-ControlEtagExpiresLast-Modified标题已被删除。

我已经看到了一些关于缓存静态内容的建议,但我不相信这些会对这种情况有所帮助。 Azure CDN的结构是否会以这种方式阻止缓存?是否应该使用Azure blob?是否存在可能被忽略的基本配置更改?

提前致谢

2 个答案:

答案 0 :(得分:1)

{{1}}

ARR代表应用程序请求路由。

转到inetmgr UI并单击服务器名称,您将找到选项' Application Request Routing Cache'。

您会看到“缓存配置”,并在那里查看选项。另外,检查'缓存控制规则'那里。点击“添加规则...'并尝试使用它。

答案 1 :(得分:0)

ARR背后的Azure网站。 ARR会丢弃一些HTTP标头并添加自己的标头,但这不是你可以直接控制的。更适合您的问题可能是使用Azure CDN进行静态内容。这确实注意并使用缓存控制头。您可以在blob存储容器的顶部运行CDN。