我们最近开始将一些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?是否存在可能被忽略的基本配置更改?
提前致谢
答案 0 :(得分:1)
{{1}}
ARR代表应用程序请求路由。
转到inetmgr UI并单击服务器名称,您将找到选项' Application Request Routing Cache'。
您会看到“缓存配置”,并在那里查看选项。另外,检查'缓存控制规则'那里。点击“添加规则...'并尝试使用它。
答案 1 :(得分:0)
ARR背后的Azure网站。 ARR会丢弃一些HTTP标头并添加自己的标头,但这不是你可以直接控制的。更适合您的问题可能是使用Azure CDN进行静态内容。这确实注意并使用缓存控制头。您可以在blob存储容器的顶部运行CDN。