Я использую 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();
}