2011-11-15 30 views
0

問題:鉻(可能還有其他的瀏覽器)緩存我的劇本包括:

我主持一個客戶的網站窗口小部件,這將是在網站上的每一頁不同。

要渲染插件,客戶端會在其網頁的腳本標籤。這個腳本標籤是爲網站上的每個頁面加載的,它返回的代碼取決於頁面。

所以,如果這個腳本被緩存的,最終的結果是我們所服務的錯誤頁面的小部件。

現在,當我們所服務的腳本,我們在響應頭

 
Cache-Control: max-age=0 
Expires : 24 hours in the past 

設置但有時瀏覽器仍緩存腳本。

問題:

有沒有辦法使用HTTP頭停止緩存在所有情況下,還是我們將不得不採取完全不同的方法的方法嗎?

UPDATE:

該topek推薦大大提高腳本的非可高速緩存的標頭。然而,在使用後退,前進或重新加載按鈕時(同樣在Chrome中,似乎是最有效緩存的緩存),腳本仍然被緩存。如果您確實點擊了它將從服務器獲取的任何內容。

看來,唯一萬無一失的方法阻止緩存將是設置保證爲每個頁面加載不同(通過esilija和TEJS的建議)腳本來源。

+1

爲什麼不直接包括隨機查詢字符串參數傳遞給JS URL請求?或附上日期時間或其他東西? – Tejs

+1

追加一個隨機無意義的查詢字符串..就像這樣:'script.js?14091341049134'。從'+新日期'生成數字,每毫秒更改一次。 – Esailija

+0

如果需要,我們可以做到這一點。然而,我們喜歡只要求我們的客戶包含一個腳本標籤的簡單性。我想我們可以讓他們包含幾行js,它們可以完成你的建議。 – Hersheezy

回答

1

這兩個標題應該做的伎倆:

response.setHeader("Cache-Control", "no-cache, must-revalidate"); 
response.setHeader("Expires", "Sat, 26 Jul 1997 05:00:00 GMT"); 

,或者您根據當前頁面,例如設定名稱當用戶請求頁面http://domain/posts/1時,腳本名稱可能是http://domain/script/scriptname/posts/1。通過這種方法,腳本仍然是每頁可以緩存的。

不要追加像script.js?random_string腳本查詢字符串。代理使用這種方法並不能很好地發揮作用。如果你想放置在名稱隨機字符串,然後把它.js這樣script-0934234234.js之前和重寫你的服務器上的請求。

相關問題