2011-06-04 110 views
5

我有此腳本刷新VS刷新

<?php 
header("Expires: Sat, 11 Jun 2011 00:00:00 GMT"); 
echo "Hello World"; 
?> 

它只是寫的「Hello World」,並設置緩存到下週六到期。

現在,當我在FireFox中加載此頁面並單擊重新加載按鈕時,它向服務器發出一個新的請求,以加載頁面而不是從緩存中提供它(我認爲要確保last-modified仍然有效)。

但是,如果我將光標放在地址欄上並按輸入,則FireFox將從緩存中提供內容。

這是爲什麼?爲什麼在第一種情況下(重新加載)它向服務器發出請求,但在第二種情況下(刷新,我猜?)它從緩存中提供服務?

回答

17

我認爲術語「刷新」和「重新加載」基本上是同義詞。我看到在RFC 2616描述HTTP/1.1緩存,提供了一個可能略有差異這一行:

期滿時間不能被用於迫使用戶代理刷新其顯示重新加載資源

換句話說,也許你可以說刷新是爲了顯示,而重新加載是爲了資源。但是由於瀏覽器主要用於資源顯示,我沒有看到有什麼區別。

這是關於處理瀏覽器緩存控制的開發人員的條款short writeup。他更喜歡的術語是這些:

  • 負荷:打輸入在地址欄;點擊鏈接
  • 刷新F5; Ctrl + R;工具欄的刷新按鈕;菜單 - >刷新
  • 硬盤重裝按Ctrl + F5 ; 按Ctrl + + [R

(硬盤重裝強制瀏覽器繞過它的緩存。對於Firefox,你按住Shift鍵,按刷新按鈕。維基百科對如何a list到對普通瀏覽器執行此操作,您可以在this page上測試其效果。)

要回答你關於Firefox如何決定何時刷新的問題,在這裏是怎麼link from above解釋它:

  • 負荷:無請求發生,直到緩存資源期滿
  • 重裝:該請求包含If-Modified-SinceCache-Control: max-age=0標頭,允許服務器使用304 Not Modified進行響應(如果適用)
  • 硬重裝:請求中包含Pragma: no-cacheCache-Control: no-cache頭,並繞過緩存
+0

大:)謝謝 – 2011-06-08 20:05:18

2

當人們刷新頁面時,他們通常期望看到新的結果,因此整個頁面的緩存沒有多大意義。

+0

我猜你是在談論relaod? – 2011-06-04 20:08:21

+0

+1這確實是一個用戶界面問題。 – 2011-06-07 19:45:38