0

Я использую CachingHttpClient для реализации HttpClient из Apache. И имея следующий сценарий:Apache HttpClient возвращает кешированный объект при условном запросе

Я сделал запрос на ресурс, который возвратил ответ с заголовком: Cache-Control: макс возраста = 5. Так кэшированиеHttpClient кэширует ответ.

Я следую за этим запросом на тот же ресурс, используя If-Modified-Since. И я получаю ответ со статусом 304 Без изменений (кстати, он даже не проверяет сервер). Без тела ответа. Это нормально, но я хотел бы получить доступ к кешированному телу, поскольку, если его не обновить, я хочу использовать его.

Возникает вопрос:

Есть удобный способ получить доступ к кэшированному ответу от первого звонка?

(Использование org.apache.httpcomponents: HttpClient, org.apache.httpcomponents: HttpClient-кэша, версия 4.5.2) сторона

Сервер:

@RequestMapping("/number") 
     public int getNumber(HttpServletResponse response, HttpServletRequest request) { 
      log.info("Number gen called"); 
      response.setHeader("Cache-Control", "max-age=" + 5); 
      return random.nextInt(); 
     } 

стороне клиента:

HttpGet httpget = new HttpGet("http://localhost:8080/number"); 

httpget.setHeader("If-Modified-Since", java.time.format.DateTimeFormatter.RFC_1123_DATE_TIME. 
     format(ZonedDateTime.now(ZoneId.of("GMT")).minusSeconds(1))); 

HttpResponse resp = httpClient.execute(httpget); 
     log.info("code: " + resp.getStatusLine().getStatusCode()); 
     // here fails because no body on 2. call 
String responseString = new BasicResponseHandler().handleResponse(resp); 

Http Client Init

@Bean 
    public HttpClient httpClient() { 
     return CachingHttpClients.createMemoryBound(); 
    } 

ответ

0

Итак, если я сконфигурировал кеш явно, я тоже могу использовать этот объект кеша, так что это была типичная проблема RTFM, моя проблема.

@Bean 
public HttpCacheStorage httpCacheStorage() { 
    CacheConfig cacheConfig = CacheConfig.custom() 
      .setMaxCacheEntries(1000) 
      .setMaxObjectSize(8192) 
      .build(); 
    HttpCacheStorage cacheStorage = new BasicHttpCacheStorage(cacheConfig); 
    return cacheStorage; 
} 
Смежные вопросы