2011-03-03 87 views
1

我有兩種類型的JavaScript文件。一個包含靜態代碼,另一個包含從會話到會話更改的動態代碼。防止瀏覽器緩存某些JavaScript文件

靜態JavaScript文件應該被緩存,而動態的只應爲該會話緩存,然後重新加載在下次會議。每個會話都會生成一次動態JavaScript文件,我希望客戶端瀏覽器在會話的其餘部分緩存它。

如何強制客戶端瀏覽器請求一個JavaScript文件每個會話?我知道通常的做法是追加一個包含版本號的請求參數,但可以只對文件進行如此多的更新,以便您可以手動更新JavaScript引用。由於每天可能有多個會話,因此您不能通過會話真正做到這一點。

+0

你使用什麼服務器端語言? – 2011-03-03 00:45:34

+0

@皮卡它是Java。 – 2011-03-03 00:54:23

回答

1

你能追加會話ID的JavaScript網址?假設你正在使用JSP,它看起來有點像這樣:

<script src="/script.js?session=<%= // code to get the session ID %>"></script> 

我不知道很多關於JSP,所以我不能用具體的幫助,但應該給你一個單一的,獨特的會話的URL。

+0

謝謝。嘿,我已經使用JSP好幾年了,你知道的比我好! – 2011-03-03 02:52:24

2

我看不出有什麼錯把一個隨機數在JavaScript網址的結尾。例如:

http://www.example.com/myjavascript.js?r=1234 

不一定會從cache'n阻止它,但如果數量是不同的,瀏覽器會加載的js文件再次。

+1

但發送正確的緩存頭會有那麼多漂亮......(我不知道該怎麼做,在Java中) – 2011-03-03 00:54:52

+0

你的意思是把代表會話的櫃檯?如果我用了很長時間,理論上可以提供多達9,223,372,036,854,775,807次會話。這是很多數字,但是它不會對可以在生命中服務的會話數量施加限制嗎? – 2011-03-03 00:59:35

+3

@Tom:假設您每天有十億次會話,您的會話ID池將在2500萬年後耗盡。這可能是足夠的時間來考慮更好的解決方案 – user123444555621 2011-03-03 02:29:15

0

在追加一個會話ID或隨機數的文件名就可以解決用戶體驗的問題,但同時也堵塞了所有無用的項目中的HTTP緩存。在響應「no-cache」時設置HTTP 1.1 Cache-Control標題應該會容易得多。如果您使用的是Java Servlet的,它的工作是這樣的:(如果一些流量將來自於傳統的瀏覽器,http://onjava.com/pub/a/onjava/excerpt/jebp_3/index2.html給出了一些其它頭設置,以真正確保沒有被緩存)

response.setHeader("Cache-Control", "no-cache"); 

+0

不會完全禁用緩存嗎?我仍然希望瀏覽器只在一個會話中緩存內存中的文件。 – 2011-03-04 18:31:11