2010-04-09 56 views
46

我已經在ASP.NET MVC應用程序中使用輸出緩存。如何指定HTTP到期頭? (ASP.NET MVC + IIS)

Page speed告訴我爲響應頭中的css和圖像指定HTTP緩存過期。

我知道Response對象包含一些控制緩存過期的屬性。我知道,這些屬性可以用來控制響應HTTP緩存,我從我的代碼服務:

Response.Expires 
Response.ExpiresAbsolute 
Response.CacheControl 

或可替代

Response.AddHeader("Expires", "Thu, 01 Dec 1994 16:00:00 GMT"); 

的問題是我怎麼設置Expires資源頭的自動供應,例如圖像,CSS等?

+0

哪個IIS版本? – 2010-04-09 15:42:12

+0

IIS 7 ...但我可能無法訪問IIS中的所有設置,此站點是託管的 – Marek 2010-04-09 15:47:54

回答

74

發現:

我需要指定靜態內容(在web.config中)客戶端緩存。

<configuration> 
    <system.webServer> 
    <staticContent> 
     <clientCache cacheControlCustom="public" 
     cacheControlMaxAge="12:00:00" cacheControlMode="UseMaxAge" /> 
    </staticContent> 
    </system.webServer> 
</configuration> 

http://www.iis.net/ConfigReference/system.webServer/staticContent/clientCache

+0

這與在IIS中設置遠期過期日期有何不同? – leora 2011-03-19 02:54:17

+3

不確定是否有任何區別 - 隨時檢查HTTP流量的差異:)提到的方法有一個優勢,即可以在不配置IIS的情況下更改緩存行爲(例如,在共享主機上) – Marek 2011-03-21 10:27:16

+1

如果im使用IIS 6呢? – Jose3d 2012-08-06 10:31:56

2
+0

雖然此鏈接可能回答此問題,但最好在此處包含答案的重要部分並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/19021525) – 2018-03-06 15:19:04

27

如果你想從代碼做它,你返回一個資源(即不是從IIS提供的靜態檔案),你最好使用Response.Cache

Response.Cache.SetExpires(DateTime.Now.AddYears(1)); 
Response.Cache.SetCacheability(HttpCacheability.Public); 

我知道這不是你所要求的,但我通過Google發現了這個問題,並且認爲其他人可能會喜歡這個答案,因爲它與你在原始問題文本中顯示的API有關。

+2

不應該是DateTime.UtcNow?如果不是,你能解釋瀏覽器如何知道服務器的本地時間是什麼? (更新:實際http://stackoverflow.com/questions/4849744/should-i-use-datetime-now-or-datetime-utcnow-in-httpcookie-expires-and-httpcache回答這個問題) – 2016-05-10 15:22:35

+1

好問題。正如你發現的那樣,這並不重要。 – 2016-05-10 17:15:49