【发布时间】:2017-06-21 09:30:20
【问题描述】:
我目前正在开发一种同步服务,该服务从交换服务器获取所有用户个人资料图片。 为了跟踪更改,我决定对响应正文进行 MD5 编码并将其与数据库中的实体一起保存,以便进一步比较它并查看图片是否已更改。而实际图片本身保存在磁盘上。
图片大小为 504x504 像素,因此重量约为 27 kb。 而且由于我正在获取字节码的哈希值,即使图片匹配,我仍然必须下载 27kb 数组,这几乎不会导致速度提高(除了我不必在磁盘上替换它)。将其乘以大量用户,即使所有图片都匹配,这项工作也需要 20 分钟。
有没有办法优化同步,所以如果图片相同,我就不会下载响应正文? 这里有一些代码可以帮助你更好地理解:
entity = restTemplate.getForEntity(
Constant.EXCHANGE_URL_PREFIX + emailAddress + Constant.EXCHANGE_URL_SUFFIX, byte[].class);
这就是我调用 get 请求的方式。
if (entity.hasBody()) {
String hexHash = Hex.encodeHexString(MessageDigest.getInstance("MD5").digest(bytes));
if (!listofHashes.contains(hexHash)) {
picture.remove();
} else picture.save();
}
总结一下:有没有办法使用不下载整个页面的restTemplate检测网页更改?提前谢谢你。
编辑:对 ETag 标头以及 @Cacheable 注释的进一步研究并未成功。
【问题讨论】:
-
可能是developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified,但不能保证服务器会同时发送该信息
-
不幸的是,我已经比较了多个请求标头,除了 request-id 之外,其他字段都相同
-
您是否尝试发出
HEAD请求而不是GET并检查响应标头?您是否尝试在请求中发送If-Modified-Since标头? -
@yinon 我尝试发送 If-Modified-Since,但不是 HEAD 请求,将对其进行调查
标签: java resttemplate spring-web