防止浏览器缓存某些JavaScript文件

时间:2011-03-03 00:44:23

标签: javascript

我有两种类型的JavaScript文件。一个包含静态代码,另一个包含动态代码,这些代码在会话之间发生变化。

应缓存静态JavaScript文件,而应仅为该会话缓存动态文件,然后在下一个会话中重新加载。每个会话生成一次动态JavaScript文件,我希望客户端浏览器在剩余的会话中缓存它。

如何强制客户端浏览器在每个会话中请求JavaScript文件?我知道通常的做法是附加一个包含版本号的请求参数,但是只能对文件进行如此多的更新,以便您可以手动更新JavaScript引用。你不能真的用会话这样做,因为每天可以有多个会话。

3 个答案:

答案 0 :(得分:2)

我没有看到在JavaScript网址末尾放置一个随机数有什么问题。例如:

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

不一定会从cache'n停止它,但如果数字不同,浏览器将再次加载该js文件。

答案 1 :(得分:1)

您可以将会话ID附加到JavaScript网址吗?假设您正在使用JSP,它看起来会像这样:

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

我对JSP知之甚少,所以我无法提供具体细节,但这应该为您提供一个唯一的会话URL。

答案 2 :(得分:0)

只需在文件名中附加会话ID或随机数就可以解决您的用户体验问题,但它也会阻塞所有带有无用条目的HTTP缓存。只需在响应中设置HTTP 1.1 Cache-Control标头就可以轻松实现“无缓存”。如果你正在使用Java Servlets,那就是这样做的:

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

(如果您的某些流量来自旧版浏览器,http://onjava.com/pub/a/onjava/excerpt/jebp_3/index2.html会提供一些其他标头设置,以确保不会缓存任何内容。)