2011-04-27 54 views

回答

103

Cache-Control在HTTP/1.1中引入,並提供比Expires更多的選項。它們可以用來完成相同的事情,但Expires的數據值是HTTP日期,而Cache-Control max-age可讓您指定相對時間量,以便您可以指定「請求頁面後X小時」。

HTML Cache control是一個非常相似的問題,並有一個很好的鏈接到緩存教程,應該回答你的大部分問題(例如,http://www.mnot.net/cache_docs/#EXPIRES)。總而言之,當你需要更多的控制緩存的方式時,推薦使用Expires作爲靜態資源,比如圖像和Cache-Control

+8

值得評論說,緩存控制是所有瀏覽器將使用什麼,但同時指定報頭,以防萬一有在路上老代理它是有用的。 – 2012-09-17 14:33:07

+3

使用服務http://redbot.org/(也可以通過[Mark Nottingham](http:// stackoverflow。com/users/152646/mark-nottingham),他寫了上面答案中引用的緩存文章)來檢查緩存頭的正確用法。 – daxim 2013-03-06 14:35:24

+19

此外: 「當存在Cache-Control和Expires時,Cache-Control優先。」 - [mnot.net/cache_docs/](http://www.mnot.net/cache_docs/) – KFunk 2014-08-12 23:02:44

22

如果您使用的是CDN(雲傳輸網絡),我建議您使用具有最大使用時間(以秒爲單位)的緩存控制。例如Cache-Control:max-age = 604800。 這樣可以防止您的原始服務器發出請求峯值:使用「Expires Wed,20xx 20xx 04:37:07 GMT」時,所有瀏覽器都會同時請求您。

+14

Apache(也可能是許多服務器)通常使用請求文件的時間來設置到期日期+您指定的超時。由於這個日期是使用秒,所以你的場景是不太可能的,並且行爲與'''cache-control'''相同。所以我不明白爲什麼在使用'Expires:'''時會​​出現請求峯值 – hilnius 2015-05-27 12:20:23

2

Heroku devcenter在這個問題上有一個excellent article

從它引用,

雖然Cache-Control頭開啓客戶端緩存,並設置一個資源的最大年齡,報頭被用於指定在時間上的資源的特定點的過期不再有效。

11

根據該谷歌開發文章,HTTP Caching

Cache-Control頭被定義爲HTTP/1.1規範 的一部分,並取代先前的報頭(例如到期)用來定義響應 緩存政策。所有現代瀏覽器都支持Cache-Control,因此我們只需要這一點就可以使用 。

0

Cache-Control在HTTP/1.1中定義,告訴所有從服務器到客戶端的緩存機制他們是否緩存這個對象。它以秒計量:Cache-Control: max-age=3600

Expires標題字段給出響應被視爲陳舊的日期/時間。 Expires值是一個HTTP日期時間戳:Expires: Tue, 18 Jul 2017 16:07:23 GMT

如果響應包含Cache-Control字段與max-age指令,收件人必須忽略Expires字段。