2012-06-22 130 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的副作用。 (現在可以在代理上而不是在客戶端瀏覽器上進行緩存。)