apache httpclient和etag缓存

时间:2015-11-29 15:19:17

标签: apache-httpclient-4.x etag apache-httpcomponents

我正在使用Apache HttpClient 4.3.1而我正在尝试集成etag验证缓存。

我试图"放弃"使用instructions in here httpclient-cache CachingHttpClientBuilder而不是我常用的HttpClientBuilder,但这似乎没有任何好处。在追踪执行过程中,它似乎是一个响应,其中包括" etag"标题(弱标签)不被认为是可缓存的 - 因此不会保留用于下一个周期。

有没有人设法在Apache HttpClient中使用基于etag验证的缓存?我也开放替代实施。

注意:

  1. 服务器返回带有弱etag标头的第一个请求(W /" 1234")。如果对同一URL的第二个请求具有" If-None-Match = 1234",则服务器返回304.这已经过检查并正常工作。
  2. 服务器发送任何其他缓存标头(过期等)。
  3. 使用现代浏览器时整个设置非常有效。

1 个答案:

答案 0 :(得分:1)

中决定是否将响应视为可缓存
ResponseCachingPolicy#isResponseCacheable(org.apache.http.HttpRequest, org.apache.http.HttpResponse)

使用

检查某些标头
ResponseCachingPolicy#isExplicitlyCacheable

当  标题'Expires'被设置或标题'Cache-Control:'具有值“max-age”“s-maxage”“must-revalidate”“proxy-revalidate”或“public”之一,该响应被认为是可缓存的。

对于我们来说,它可以为服务器上的响应添加“Cache-Control:'must-revalidate',以及'Etag'标题。

使用此设置apache http client

  • 将第一个请求的响应存储在缓存中
  • 在第二个请求上,向服务器发送请求,如果用HttpStatus 304响应(未修改),则返回HttpStatus 200(ok)并将原始内容返回给调用者

应该是这样的。 我们正在使用apache http客户端缓存的4.5.2版。