我有以下行动方法:
[HttpGet, Authorize, OutputCache(Duration = 60, VaryByHeader = "Cookie", Location = OutputCacheLocation.Any)]
public ActionResult Index()
但是当我提出请求时,这些是发出的标题:
Cache-Control: private, max-age=60, s-maxage=0
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Fri, 22 Jun 2012 09:56:32 GMT
Last-Modified: Fri, 22 Jun 2012 09:55:32 GMT
Vary: Accept-Encoding
为什么不包括Vary中的Cookie标头?
我尝试了OutputCache
设置的多种变体但无济于事(
答案 0 :(得分:3)
我讨厌IIS几乎和讨厌ASP.NET一样多。
答案 1 :(得分:0)
因此响应包含在由Andrew Bullock链接的网页文件名",又名" iis压缩覆盖了变化标题"。
但自2013年12月起,可以使用修补程序(可在Andrew Bullock链接中找到)。像往常一样,此修补程序可能包含在常规修补程序中,因此请确保在应用它之前仍需要它。
因为它是"最佳实践"要明确地从链接提供信息而不是仅提供链接(如果页面出现故障),这里有一个摘要:
IIS动态压缩会覆盖Vary
标头。这似乎适用于从版本5到版本8的IIS(当从msdn博客和msdn kb累积信息时)。如果需要,请禁用IIS动态压缩,或尝试应用http://support.microsoft.com/kb/2877816/en-us处提供的修补程序。 (此问题可能由Windows 8.1 / 2012 R2系列上的常规修补程序修复。此修补程序从IIS 7开始提供,在win7 sp1上进行了个人测试,尚未在我的服务器上进行测试。)
在我的具体情况中,我还有另一个问题:asp.net没有发出任何Vary
标头(已启用或未启用压缩),outputCache
location
设置为{{1} }。将其设置为Client
"已解决"这个附加问题。但当然,这会产生将Downstream
从Cache-Control
更改为private
的副作用。 (现在可以在代理上缓存,而不是仅在客户端浏览器上缓存。)