Firefox 的 "Back" 按鈕的快取問題。

8 views
Skip to first unread message

gugod

unread,
Oct 6, 2006, 12:26:59 AM10/6/06
to hsinchu.js
有許多時會不希望 cgi
所產生的內容被瀏覽器快取,一般來說都是使用這一組
HTTP Response Header:

Pragma: no-cache
Cache-Control: no-cache
Expires: now

Expires
本來後面應該要接個合乎格時的時間字串,不過在 HTTP
1.1
的規格裡面表示,如果是個不合格的字串,就當成立刻失效。

但 Firefox 有個問題,如果是直接打 URL 的話,這一組
Header 的確會讓它重新下載內容。但如果是用 Back
按鈕的話就不會了。所以,以下的步驟會出現怪異的情況:

1. 載入某頁面 A
2. 用 In-place 修改某頁面部份的值,並用 Ajax request
更新 server 端的資料。此時 A 的內容在 Server
端與瀏覽器上都被更新為 A'。
3. 點頁面上的鏈結,或手打 URL ,離開頁面 A'
4. 點 Back 按鈕。應該要顯示 A' ,但仍然顯示 A

這是因為 Firefox 對於 Cache-Control
的值有更細微的解釋。"no-cache"
表示不應快取它,但並不表示不應在瀏覽器的歷史記錄裡留資料(特別記得在
Firefox 1.5 之後對於 back
按鈕裡做了許多增強)。因此,只用 no-cache
是無用的。以下是有效的做法:

Cache-Control: no-store, no-cache, must-revalidate, post-check=0,
pre-check=0

這些值都與快取有關。但其中的 "no-store" 便能讓 Firefox
在處理快取時,完全不將頁面存下。

Cheers,
Kang-min Liu

Reply all
Reply to author
Forward
0 new messages