如何URLConnection.setUseCaches()工作的做法?(How does URLC

2019-08-02 12:26发布

我有一个加载了使用URLConnection的HTTP连接图像的小程序。 我设置为所有连接setUseCaches(真),但仍然没有看到任何缓存行为。 我的形象的HTTP标头有合理的缓存设置。 如果你看一下错误4528599有此而神秘的语句:

的Java插件的最新版本(1.3.1)只检查文件,后缀名为中的.jar或的.class浏览器缓存。 有人告诉我,对于Java插件1.4浏览器的缓存将以下文件类型检查:的.class,的.jar,.zip文件,个.jpg,.gif .WAV,.AU。

当然,这个被标记为固定的1.6,但即使在1.6我没有看到任何缓存。 我的图片PNG文件,并在某些情况下,实际上并不.png文件扩展名结尾英寸 我没有看到任何缓存。

错误修复报告谈到了1.6统一下载引擎,但谷歌似乎并不很了解。

难道这工作还是它只是另一个破的太阳“功能”。 有什么办法或替代方案,我可以让我的小程序从浏览器缓存加载PNG图像? 我宁愿不实现自己的....

UPDATE:缓存似乎绑定到ResponseCache中实现。 请参阅此技术对于其工作原理的更多信息。 最后一行说:

还有的URLConnection缓存在Java 2标准版没有默认实现。 但是,Java插件和Java Webstart的确实提供一个开箱即用。

所以,在我看来,该问题真的成为:如何Java插件ResponseCache中实现真正的工作? 什么是V1.4 / V1.5 / 16节之间的差异

任何人有什么想法?

Answer 1:

这种方法很可能只设置在传出请求的HTTP Cache-Control头指令,以允许高速缓存值。 假如你叫setUseCaches(假的),有会是一个

Cache-Control: no-cache

指令为例。 为了检验这一点,你可以把一个HTTP调试代理服务器小程序和服务器之间,并采取一看标题。

现在,只是因为请求说,这是愿意使用缓存,您的服务器可能无法建立,使他们。 也许它不是设置一个在响应与适当长的时间的Expires头,或者它设置在禁止高速缓存的响应的缓存控制头。

一些其他的事情来检查:

  • HTTPS响应不会被缓存;
  • 您可能没有客户端和服务器之间的HTTP缓存;
  • 唯一的HTTP缓存是浏览器的缓存,但它可能会被禁用或设置为使用很少的磁盘。

如果这只是一个香草浏览器的Web应用程序的测试,你还愿意要确保你没有点击刷新按钮,因为这等同于设置无缓存。



Answer 2:

抽象类URLConnection提供设置/ getUseCaches方法,其可以通过任何亚类可以使用。 至于我曾经已经能够确定,但是,HttpURLConnection类类不以任何方式使用这些字段。 将该值设置为true或false不会有任何不同的行为。

如果你想添加http cacheing行为,你可以自己做(编写自己的或扩展HttpURLConnector;或使用套接字),或尝试使用IF-Modified-Since的和如果-无-匹配标题和寻找一个状态代码304(未修改)。 第二个选项可能是最简单的,并会得到最好的结果。



文章来源: How does URLConnection.setUseCaches() work in practice?