2011-03-03 164 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