当前位置: 首页 > 知识库问答 >
问题:

apache httpclient and etag cache

梁丘俊材
2023-03-14

我正在使用Apache 4.3.1,我正在尝试集成电子标记验证缓存。

我已经尝试使用这里的指令“加入”http client-cache cachingthpclientbuilder,而不是我通常使用的HttpClientBuilder,但这似乎没有任何好处。在跟踪执行时,带有“etag”头(弱etag)的响应似乎不被认为是可缓存的——因此不会保留到下一个周期。

有人设法在Apache HttpClient中使用基于etag验证的缓存吗?我也愿意接受其他的实现方式。

笔记:

    < li >服务器返回带有弱etag头的第一个请求(W/"1234 ")。如果对同一URL的第二个请求有“If-None-Match=1234”,服务器返回304。这是检查和工作。 < li >服务器不发送任何其他缓存头(过期等)。 < li >当使用现代浏览器时,整个设置运行良好。

共有1个答案

杜思远
2023-03-14

一个响应是否被认为是可缓存的由

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'标头一起添加到服务器上的响应中。

使用此设置,阿帕奇 http 客户端

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

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

 类似资料:

相关问答

相关文章

相关阅读