gpt4 book ai didi

apache-httpclient-4.x - apache httpclient 和 etag 缓存

转载 作者:行者123 更新时间:2023-12-04 18:01:51 28 4
gpt4 key购买 nike

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

我尝试使用 instructions in here 来“加入”httpclient-cache CachingHttpClientBuilder 而不是我常用的 HttpClientBuilder ,但这似乎没有任何好处。在跟踪执行时,似乎具有“etag” header (弱 etag)的响应不被视为可缓存 - 因此不会保留到下一个周期。

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

注意事项:

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

最佳答案

一个响应是否被认为是可缓存的取决于

ResponseCachingPolicy#isResponseCacheable(org.apache.http.HttpRequest, org.apache.http.HttpResponse)

它检查一些 header 使用

ResponseCachingPolicy#isExplicitlyCacheable

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

对我们来说,将“Cache-Control: 'must-revalidate'”连同“Etag” header 添加到服务器上的响应很有效。

通过此设置 apache http 客户端

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

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

关于apache-httpclient-4.x - apache httpclient 和 etag 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33984360/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com