2012-06-22 90 views
5

我有以下操作方法:MVC3的OutputCache VaryByHeader =饼干未设置

[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

所以响应包含在由Andrew Bullock链接的“页面文件名”中,又名“iis压缩覆盖了不同的标题”。

但自2013年12月以来,有一个修补程序可用(可在Andrew Bullock链接中找到)。 x可能包含在常规补丁中,因此在应用之前确保您仍然需要它。

而且因为它是“最佳实践”,明确供应从链接,而不是只提供(页面下降的情况下)的链接信息,这里是一个抽象:

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标题(压缩启用与否)与outputCachelocation设置为Client。将其设置为Downstream“解决了”这个额外问题。但是,当然,这具有将Cache-Controlprivate更改为public的副作用。 (现在可以在代理上而不是在客户端浏览器上进行缓存。)