Apache CachingHttpClient在第一次调用时不起作用

时间:2019-08-08 11:21:18

标签: java apache-httpclient-4.x

我有一个页面返回以下缓存头:

Last-Modified: Wed, 07 Aug 2019 14:21:11 GMT
Cache-Control: max-age=1800, must-revalidate

哪种AFAIK是完全合法的语法,它要求客户端每次检查新版本,但仅在更改后才获取新版本(If-Modified-Since标头的用例)。

但是,the example code from Apache HttpClient documentation无效。

在尝试深入研究代码之前,我有个简单的循环思路:

CacheConfig cacheConfig = CacheConfig.custom().setMaxCacheEntries(1000).setMaxObjectSize(8192).build();
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(30000).setSocketTimeout(30000).build();
CloseableHttpClient cachingClient = CachingHttpClients.custom().setCacheConfig(cacheConfig).setDefaultRequestConfig(requestConfig)
    .build();

for(int i = 0; i < 4; i++)
{
  HttpCacheContext context = HttpCacheContext.create();
  HttpGet httpget = new HttpGet(appUrl);
  CloseableHttpResponse response = cachingClient.execute(httpget, context);
  System.out.println(response.getStatusLine() + "\t" + context.getCacheResponseStatus());
  response.close();
}

令我惊讶的是,输出是:

HTTP/1.1 200 OK CACHE_MISS
HTTP/1.1 200 OK CACHE_MISS
HTTP/1.1 200 OK CACHE_HIT
HTTP/1.1 200 OK CACHE_HIT

这意味着高速缓存仅在第一次时不起作用(因此,在第二次调用时,应从高速缓存中返回版本)。所有后续请求均按预期工作。

在通话前添加超时不会改变任何内容。第一个请求不写任何内容要缓存,第二个请求不写缓存,但保存到缓存,所有后续请求都从缓存中获取版本。

我在这里错过了一些琐碎的事情吗,或者这是一个错误?我正在使用最新版本的apache httpclient:https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient-cache/4.5.9

0 个答案:

没有答案