我在客户的机器上部署了一个GWT应用程序。作为一个持续的 随着发展,我们必须发布新的改进版本 申请时不时。我们每次发布新版本时都会 经常遇到客户端浏览器缓存的问题 旧脚本脚本有一段时间它表现得像数据一样笨拙 试图与之合作并不完全兼容。是什么 克服这个问题的最佳方法。目前我要告诉用户 清除浏览器的缓存以获得新版本,但这样会很好 他们不必这样做。
答案 0 :(得分:15)
可能的解决方案取决于您托管应用程序的方式。如果您直接从servlet容器托管,那么您可以使用servlet过滤器,如下所述:
http://seewah.blogspot.com/2009/02/gwt-tips-2-nocachejs-getting-cached-in.html
以下是来自tadedon库的适当过滤器:
这里是guice ServletModule,它可以为整个guice Web应用程序启用它们:
如果你在tomcat前面使用一些反向代理,它会更简单。如果是apache(例如mod_proxy,mod_jk),并假设所有应用程序资源(html,图形,java脚本,css等)都放在apache上,只需在apache配置中设置这些选项:
<Files *.nocache.*>
ExpiresDefault "access"
</Files>
<Files *.cache.*>
ExpiresDefault "now plus 1 year"
</Files>
这里描述:
http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebugging.html
<完美缓存中的部分。此类部署方案假定只有rpc请求应通过反向代理到tomcat。如果由于某些原因将所有应用程序上下文代理到tomcat,您仍然可以使用apache的LocationMatch
指令而不是Files
指令。
答案 1 :(得分:14)
默认情况下,浏览器应缓存大部分应用,直到构建过程生成新版本的应用为止。
了解GWT引导模型可能有助于理解其工作原理。
客户端请求的第一个脚本your-app-name.nocache.js
未缓存,除了检查浏览器的用户代理和功能外,它什么都不做,并对相关应用程序JS发出第二个请求。
此时,如果之前已请求过,则应由浏览器缓存它请求的脚本。这是{indistinguisable-numbers-and-letters}.cache.html
文件。
重新部署应用程序时,将执行nocache.js
文件,并从服务器请求另一个cache.html
文件,该文件不会出现在缓存中,但会被缓存浏览器下载后。
您是否正在使用延迟绑定或服务器上的缓存标头执行任何异常操作?这可能会导致您的nocache.js
文件被缓存,这会使它从浏览器缓存中请求旧的cache.html
。