停止GWT应用中的浏览器脚本缓存

停止GWT应用中的浏览器脚本缓存,gwt,browser,caching,Gwt,Browser,Caching,我在我们客户的机器上部署了一个GWT应用程序。作为持续的 除了开发,我们还必须发布新的改进版本 不时申请。每次我们发布新版本时 经常遇到客户端浏览器缓存数据的问题 旧脚本和脚本在一段时间内,它的行为与它所使用的数据非常相似 正在尝试与的不太兼容。问题是什么 克服这个问题的最佳方法。目前我不得不告诉用户 为新版本清除浏览器缓存,但这会很好 他们不必这么做 默认情况下,浏览器应缓存大部分应用程序,直到生成新版本 了解GWT引导模型可能有助于理解其工作原理 客户端请求的第一个脚本,your app n

我在我们客户的机器上部署了一个GWT应用程序。作为持续的 除了开发,我们还必须发布新的改进版本 不时申请。每次我们发布新版本时 经常遇到客户端浏览器缓存数据的问题 旧脚本和脚本在一段时间内,它的行为与它所使用的数据非常相似 正在尝试与的不太兼容。问题是什么 克服这个问题的最佳方法。目前我不得不告诉用户 为新版本清除浏览器缓存,但这会很好
他们不必这么做

默认情况下,浏览器应缓存大部分应用程序,直到生成新版本

了解GWT引导模型可能有助于理解其工作原理

客户端请求的第一个脚本,
your app name.nocache.js
,没有被缓存,它除了检查浏览器的用户代理和功能外,什么也不做,并对相关的app js发出第二个请求

此时,如果以前请求过脚本,浏览器应该缓存它请求的脚本。这是一个
{无法区分的数字和字母}.cache.html
文件

重新部署应用程序时,将执行
nocache.js
文件,并从服务器请求另一个
cache.html
文件,该文件不会出现在缓存中,但下载后将由浏览器缓存


您在服务器上使用延迟绑定或缓存头时是否有任何异常情况?这可能会导致您的
nocache.js
文件最终被缓存,这将使它从浏览器缓存请求旧的
cache.html

可能的解决方案取决于您托管应用程序的方式。如果您直接从servlet容器托管,那么您可以使用如下所述的servlet过滤器:

以下是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>

ExpiresDefault“访问权限”
ExpiresDefault“现在加上1年”
这里描述的是:


在“完美缓存”部分。这种部署场景假设只有rpc请求应该通过反向代理到达tomcat。如果由于某些原因,所有应用程序上下文都被代理给tomcat,那么您仍然可以使用apache的
LocationMatch
指令,而不是
Files
指令。

Jason,这似乎是您的-app-name.nocache.js被缓存在浏览器中的副作用。Shahid必须将其服务器配置为仅缓存*.cache.js而不缓存*.nocache.js。除此之外,您提到的所有内容都应该自动到位。@jason hall关于如何向通过your-app-name.nocache.js加载的脚本的url中注入一些哈希的想法?在我的例子中,your-app-name.nocache.js在没有缓存的情况下正确加载,但由此加载的脚本仍然来自缓存。我想在每次构建时生成一个哈希,并将其添加到url。。。