2011-04-12 70 views
0

我有一個用PHP生成的經典html頁面。用於緩存動態頁面的Http標頭

對於此頁面(從同一個URL提供服務),我們有兩種情況:

  1. 用戶登錄(基於cookie)=>此頁面是特定於用戶(我們顯示與用戶名框+個人信息。)
  2. 用戶未登錄=>該頁面對所有用戶都是通用的。

如何設置的標頭:

  • 有最侵略性緩存(與60最大年齡)。
  • 避免在用戶之間混合頁面。

我可以取代我現在頭:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 

有了這個?

header('Cache-Control: public, max-age=60'); 
header('Vary: *'); 

編輯:是否有可能(如何)在「1」和公衆的情況下,「2」

回答

0

如果登錄純粹的cookie,然後根據你只需要緩存controled私人Vary:Cookie標頭,使其對特定用戶而言是唯一的。變異:*應該儘可能地工作。

+0

保重!它並不那麼容易:IE不會緩存Vary頭和任何字段的資源[但Accept-Encoding和User-Agent](http://code.google.com/speed/page-speed/docs/caching.html) – alienhard 2011-04-12 19:16:02

+0

如果您不包含Vary頭文件,則會遇到安全問題。 IE具有根本沒有的方式來處理這種類型的設置的高速緩存,其中所述URL是相同的,但含量變化的基礎上的cookie的值(被記錄在或不即用戶)。 – ajsutton 2011-04-12 19:24:38

+0

是的,但我認爲它的錯誤的方式來嘗試解決這個問題因人而異用(除非你有沒有IE的用戶較少的情況下)。一個好的解決方案是根據不同的情況提供不同的頭文件:1)發送阻止緩存的頭文件; 2)發送頭文件以允許緩存。在這兩種情況下都不需要Vary。 – alienhard 2011-04-12 20:16:21