Java Applet永久缓存,不下载新版本吗?

时间:2020-03-05 18:54:31  来源:igfitidea点击:

在某些情况下,客户端似乎永远在缓存小程序的版本。我们在我们的<object>标签中正确使用了<param name =" cache_version">标签,或者我们认为。我们从版本字符串" 7.1.0.40"转到" 7.1.0.42",这仅触发了大约一半客户的下载。

客户端运行哪个版本的JRE似乎无关紧要。我们已经看到人们在1.4、1.5和1.6上存在此问题。

有人对显式缓存版本有经验吗?是否依靠cache_archive的" Last-Modified"和/或者" Content-Length"值(根据Sun的站点)来工作更可靠(忽略速度)?

仅供参考,对象块如下所示:

<object>
  <param name="ARCHIVE" value="foo.jar">
  <param name="CODE" value="com.foo.class">
  <param name="CODEBASE" value=".">
  <param name="cache_archive" value="foo.jar">
  <param name="cache_version" value="7.1.0.40">
  <param name="NAME" value="FooApplet">
  <param name="type" value="application/x-java-applet;jpi-version=1.4.2_13">
  <param name="scriptable" value="true">
  <param name="progressbar" value="true"/>
  <param name="boxmessage" value="Loading Web Worksheet Applet..."/>
</object>

解决方案

回答

不幸的是,不同版本的Java插件具有不同的缓存行为。设置Cache-Control和Last-Modified HTTP标头是理想的解决方案,但是它仅在最新版本的JRE下有效。

保证有效的唯一解决方案是在应用程序jar的版本更改时对其进行重命名(在尝试其他技巧(例如基于文件日期添加查询字符串)时,我们已经看到了奇怪的缓存行为)。如果我们有一个适当的自动化部署系统,这并不是很难做到的。