2009-11-03 52 views
1

上周四我们刚刚发布了我们网站的新版本。最大的变化是我们从Prototype转换为jQuery。这当然包括很多对引用的JavaScript文件的更改。还有新的css文件更改。不幸的是,我们的许多客户没有看到这些变化。我甚至让一位客户清除浏览器缓存,按F5直接下载js文件。他仍然得到旧版本。为什么我的用户在发布我们网站的新版本时看不到最新的更新?

我们有什么方法可以通知所有参与者(浏览器,代理服务器等)我们文件的变化?

顺便说一句,我们的许多客户都是财富500强企业。他们使用IE 6并且通常位于代理服务器之后。

我们使用Tomcat 6和Apache 2.

+0

由Tomcat或Apache2提供的内容是否未更改? – jconlin 2009-11-03 19:03:27

+0

代理服务器是否有可能缓存内容? – jconlin 2009-11-03 19:04:03

回答

3

我注意到StackOverflow上对他们的文件

http://sstatic.net/so/js/question.js?v=5207 

所以,我想这对我们的网站使用的版本号和它似乎是工作。有一位特别固执的浏览器的用户在更改后立即看到结果。

我喜欢这件事情,这对我们来说确实不难实现,它仍然允许浏览器和代理缓存不会有太大变化的文件。

+2

要获得更灵活的变体,只需将脚本文件的Unix最后修改时间戳附加到源属性(例如, “的script.js?NNNNNNNNNNNNNNNNN“就可以做到这一点,这意味着只要文件发生变化就会发生缓存未命中。在生产中,当然,这将在新版本发布时发生。 – Rob 2009-11-03 19:18:44

1

我有一个类似的问题。最后,我通过发送每个页面的http标题来“解决”它,表明内容已过期并强制页面更新。不是一个非常优雅的解决方案。

在PHP中,这是:

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 

约Tomcat的不知道,但。

+1

问题在于询问Tomcat设置,因此PHP并不是非常相关,但HTTP头值也可以用Java设置。 – 2009-11-03 18:46:17

2

对于Tomcat,部署时请确保在重新启动之前删除work/Catalina/localhost目录中的所有内容。这是tomcat的缓存目录。同样在me_here中声明的servlet/JSP中添加头文件可能会有所帮助。

+0

我在发布时总是删除工作目录。大多数用户都看到正确的文件,所以我知道它不能成为工作目录。 – 2009-11-03 19:00:13

2

如果代理服务器缓存您的网站,那么您可以做的事情很少。您可以尝试将CACHE-CONTROLPRAGMA:NO-CACHE标题添加到您的页面。

您还应该尝试在您和服务器之间尽可能少地复制问题。 Tomcat在“工作”缓存中保留文件时遇到问题,因此请务必删除它。

+0

实际上,我们的代理服务器持有我们的html文件时出现问题。但我添加了 ServletActionContext.getResponse()。setHeader(“Cache-Control”,“private,max-age = 0”); 给拦截器。这解决了服务器缓存这些文件的问题。但是,js,css和图像有时仍会缓存。 – 2009-11-03 19:12:15

相关问题