2011-11-23 30 views
11

我正在通過Internet Explorer 9的緩存撕裂我的頭髮。Internet Explorer 9忽略沒有緩存標頭

我根據查詢字符串值從perl腳本設置了一系列cookie。這些cookie包含關於橫幅和顏色等頁面上各種信息的信息。

我遇到的問題是,在IE9中,它始終總是使用緩存而不是使用新值。事件的順序運行是這樣的:

  1. 訪問www.example.com/?color=blue
  2. Perl腳本,使用cookies,我重定向回www.example.com
  3. 顏色有藍色,一切都如預期。
  4. 訪問www.example.com/?color=red
  5. 餅乾設置,設置爲紅色重定向,顏色,都屬於正常
  6. 重訪 www.example.com/?color=blue
  7. Perl腳本運行,Cookie重新設置(我已經證實了這一點),但! IE9從緩存中獲取所有資源,因此重定向時我的所有顏色都保持爲紅色。

因此,每次訪問新的URL時都會獲得新的資源,但每次訪問以前訪問過的URL時,都會從緩存中檢索它們。

以下meta標籤是在<頭example.com的>,我本以爲這防止使用緩存:

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> 
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 
<META HTTP-EQUIV="EXPIRES" CONTENT="0"> 

對於它的價值 - 我也試過<META HTTP-EQUIV="EXPIRES" CONTENT="-1">

IE9似乎忽略所有這些指令。到目前爲止,我在瀏覽器中獲得成功的唯一時間是使用開發人員工具並確保將其手動設置爲「始終從服務器刷新」

爲什麼IE忽略我的標頭,以及如何強制它每次檢查服務器?

+0

你看過http://stackoverflow.com/questions/4360283/http-cache-control?試過私人? –

+0

好吧,我剛剛嘗試將其設置爲CONTENT =「PRIVATE」,並遇到同樣的問題。 –

+2

嘗試進行客戶端API調用...在這種情況下,即使「始終從服務器刷新」也不起作用。 我現在有IE9幾乎和我討厭IE6一樣多 – Vroomfundel

回答

3

嘗試發送以下內容作爲HTTP標頭(未meta標籤):

Cache-Control: private, must-revalidate, max-age=0 
Expires: Thu, 01 Jan 1970 00:00:00 
7

這些都不是頭。它們是<meta>元素,這是HTTP頭的極其糟糕的替代品。我建議你閱讀Mark Nottingham's caching tutorial,它詳細介紹了這一點以及關於哪些緩存指令適合使用。

此外,忽略任何人告訴你將緩存設置爲private使緩存在瀏覽器 - 它說「這是可以緩存,只要你不轉發給另一個客戶端」

0

剛纔提到我看起來很像這個問題。但我在另一臺電腦上試用了IE9,沒有問題。然後去Internet選項 - >常規 - >刪除並刪除一切恢復正確的行爲。刪除緩存是不夠的。

0

HTML5指定的唯一項目是內容類型,默認樣式和刷新。 See the spec.

其他似乎工作的東西只有瀏覽器的優點,你不能依賴它。

-2

johnstok是正確的。在該代碼中鍵入內容將允許從服務器更新內容,而不僅僅是刷新頁面。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8; Cache-Control: no-cache" /> 

把這行代碼放到你的部分,如果你需要有它在你的ASP代碼,它應該工作。

+0

Anthony

2

我不知道這對任何人都有用,但我的電影網站(crosstastemovies.com)有類似的問題。每當我點擊按鈕「獲得更多的電影」(其中檢索一個新的隨機批次的電影進行評級)IE9將返回完全相同的頁面,並忽略服務器的響應...:P

我不得不調用一個隨機變量,以防止IE9做到這一點。因此,我沒有調用「index.php?location = rate_movies」,而是將其更改爲「index.php?location = rate_movies & rand = RANDOMSTRING」。

現在一切正常。

乾杯