2011-07-22 218 views
2

我幫助維護了幾個發佈新聞和參考信息的基於Wordpress的網站。在瀏覽器會話中強制瀏覽器緩存

我們一直在努力盡可能快地在網站上加載頁面。

我們所做的一件事是在我們的大多數靜態文件(如圖像和css文件)的「緩存控制」http頭中實現了很長的「最大年齡」時間。

我們使用的特定緩存控制設置是「public,max-age = 31536000」。 31,536,000秒是365天。

好處在於,此設置確實會導致靜態文件在用戶瀏覽我們網站的不同頁面時被緩存。

但是,這是蹭。這個緩存控制設置對瀏覽器會話沒有太大幫助。即使該設置應該告訴瀏覽器「緩存該文件一整年」,如果我們網站的訪問者關閉了瀏覽器,然後在五分鐘後啓動並返回到我們的網站,瀏覽器仍然堅持重新加載所有的靜態文件,即使它仍然在緩存中。

我已經在Firefox中仔細檢查過,查看帶有Live HTTP Headers的標題。但是我也可以定性地看到其他瀏覽器中發生的相同情況。

顯然,如果在當前瀏覽器會話期間內容尚未加載一次,瀏覽器會堅持重新加載網站的所有內容。

那麼......有什麼辦法可以向瀏覽器「禮貌地建議」他們總是從緩存中加載緩存內容,即使瀏覽器在當前瀏覽器會話期間還沒有訪問我們的網站?

+0

我花了很多時間仔細研究上述問題。這似乎是問題主要發生在Internet Explorer中。我最初在Firefox中觀察到的問題是由於我的特定版本的Firefox中存在脫機存儲設置。改變了設置後,Firefox現在看起來非常適合在瀏覽器會話中使用緩存內容,並且Chrome也似乎在同一方面表現良好。 Internet Explorer(我已經用IE7完成了大部分測試)不太好。我會做更多的測試並報告我發現的內容。 – BeSimple

回答

0

檢查ETag,Expires和Last-Modified標題。

您需要一個Expires標頭,有時ETag和Last-Modified可以擊敗緩存。

+0

謝謝@ScottAnderson的反饋意見。 – BeSimple

+0

不幸的是,我們無法控制我們大部分靜態內容的Etag和Expires設置,因爲它是從CDN提供的,而CDN服務並不能控制這些HTTP標頭。 – BeSimple

+0

我們使用的CDN會自動將ETag標頭附加到我們提供的靜態文件中。如果我們設置「緩存控制」標題,它將不會爲該文件提供「Expires」標題。也就是說,我們爲網頁提供的其他文件(來自Google的API服務)具有「超時」設置,其中包含「Expires」標頭,並且沒有Etag標頭,並且它們將在瀏覽器會話中重新讀取就像我們的文件一樣。所以它不是缺少Expires頭文件,也不是包含Etag頭文件,這是問題的根源。 – BeSimple