5

我有以下操作方法:

[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设置的变体,但无济于事:(

4

2 回答 2

3

我讨厌 IIS 几乎和讨厌 ASP.NET 一样多。

http://blogs.msdn.com/b/chaun/archive/2009/10/01/iis-compression-overwrites-the-vary-header-average-rating-0-ratings.aspx

于 2012-06-22T12:50:20.220 回答
0

因此响应包含在 Andrew Bullock 链接的 URL“页面文件名”中,也就是“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开始就有这个hotfix,在win7 sp1上亲自测试过,还没有在我的服务器上。)

在我的具体情况下,我还有另一个问题:asp.net 没有发出任何Vary设置outputCache locationClient. 将其设置为Downstream“解决”了这个附加问题。Cache-Control但是,当然,这具有从更改private为 的副作用public。(现在可以在代理上缓存,而不仅仅是在客户端浏览器上。)

于 2014-09-15T15:47:45.140 回答