2009-07-16 77 views
4

我剛剛開始在我的一些控制器操作中使用OutputCache,並且我沒有完全得到我期望的響應。ASP.NET MVC:OutputCache和http headers

我已經將緩存時間設置爲5分鐘,並且Expires報頭與Last-Modified報頭相同,這是發出請求的時間。

這頭我目前得到:

Date     Thu, 16 Jul 2009 06:35:07 GMT 
Server     Microsoft-IIS/6.0 
X-Powered-By   ASP.NET 
X-AspNet-Version  2.0.50727 
X-AspNetMvc-Version  1.0 
Content-Encoding  gzip 
Cache-Control   public, max-age=300 
Expires     Thu, 16 Jul 2009 06:35:06 GMT 
Last-Modified   Thu, 16 Jul 2009 06:35:03 GMT 
Vary     * 
Content-Type   text/html; charset=utf-8 
Content-Length   575 

這頭我希望:

Date     Thu, 16 Jul 2009 06:35:07 GMT 
Server     Microsoft-IIS/6.0 
X-Powered-By   ASP.NET 
X-AspNet-Version  2.0.50727 
X-AspNetMvc-Version  1.0 
Content-Encoding  gzip 
Cache-Control   public, max-age=300 
Expires     Thu, 16 Jul 2009 06:40:06 GMT 
Last-Modified   Thu, 16 Jul 2009 06:35:03 GMT 
Vary     * 
Content-Type   text/html; charset=utf-8 
Content-Length   575 

爲什麼它會做任何想法?

乾杯 安東尼

回答

5

max-age優先(從RFC 2616):

我們使用術語expires_value到 表示的值的到期 報頭。我們使用術語 max_age_value來表示緩存控制報頭 的「max-age」 指令在響應中攜帶的 秒的合適值(見14.9.3節)。

的最大年齡指令優先 超過到期,所以如果最大年齡是存在於響應 ,計算 簡單:

freshness_lifetime = max_age_value 

否則,如果到期時 存在於響應,該 計算方法是:

freshness_lifetime = expires_value - date_value 

所以客戶應該使用緩存如你所期望的那樣。

+0

Humm是否僅適用於HTTP/1.1?因爲我使用的只是支持HTTP/1.0的代理。那麼這仍然適用? – 2009-07-16 07:13:19

+0

代理支持的內容僅與代理對內容的作用不同。發送的標頭取決於輸出緩存屬性中指定的緩存位置。 – bzlm 2009-09-21 20:28:00

+1

Cache-Control標頭是在HTTP/1.1中引入的,用於處理Expires標頭中的限制。問題是Expires頭文件設置了一個固定的失效日期,如果客戶端和服務器時鐘不同步,會導致問題。 當使用支持HTTP/1.1(幾乎所有瀏覽器)的瀏覽器時,Expires標頭將被忽略,以支持Cache-Control - max-age標頭。使用Expires標頭的唯一時間是請求來自僅支持HTTP/1.0而不是HTTP/1.1的瀏覽器。 – 2010-01-31 13:57:28