2010-05-02 17 views
9

詢問關於sending 「304 Not Modified」 for images stored in the in the Google App Engine datastore的問題後,我現在有一個關於Cache-Control的問題。對於存儲在數據存儲區中的圖像發送「304未修改」時,可以設置「Cache-Control:public」

我的應用程序現在發送Last-ModifiedEtag,但默認GAE alsto發送Cache-Control: no-cache。據this page

的「無緩存」指令,根據 的RFC,告訴它 應該從 緩存提供該頁面之前與服務器重新驗證 瀏覽器。 [...]在實踐中,IE瀏覽器和 Firefox已經開始對待 no-cache指令,就好像它指示 瀏覽器甚至不緩存 頁面一樣。

,因爲我希望瀏覽器緩存圖像,我已經添加了下面一行到我的代碼:

self.response.headers['Cache-Control'] = "public" 

根據同一頁面之前:

的「緩存控制:公共「指令 [...]告訴瀏覽器和代理 該頁面可能被緩存。 這對於非敏感頁面很有用, 由於緩存提高了性能。

問題是,這是否會以某種方式危害應用程序?會是最好送Cache-Control: must-revalidate爲「力」的瀏覽器重新驗證(我想這是最初的背後發送Cache-Control: no-cache的原因行爲)

該指令堅持認爲, 瀏覽器必須重新驗證 頁面反對服務器在從緩存中提供 之前。請注意,它隱含地讓 讓瀏覽器緩存頁面。

回答

1

除非您的內容受HTTP身份驗證或SSL保護,否則不需要設置Cache-Control: public

嘗試設置Cache-Control: max-age=nn(其中,nn是您希望緩存考慮新鮮響應的整數秒數)。 AppEngine 應該刪除no-cache。

0

這不會對您的應用程序造成危害,該頁面中描述的唯一風險相當於公共代理(例如由ISP使用的代理)緩存您的映像。如果圖像是機密或用戶特定的,則不希望發生這種情況。在其他所有情況下,緩存正是你想要的。

相關問題