私はApacheのHttpClientのCachingHttpClient実装を使用しています。次のシナリオを持っています:Apache HttpClientは条件付きリクエストでキャッシュされた本体を返します
私は、ヘッダーで応答を返したリソースを要求しました: キャッシュコントロール:max-age = 5。 したがって、CachingHttpClientは応答をキャッシュします。
私は以下を使用して同じリソースの条件付きリクエストを作成していますIf-Modified-Since。そして、私は状態コード304で応答を得ません。変更されていません(btwはサーバーをチェックしていません)。レスポンスボディなし。これはうまくいきますが、キャッシュされたボディにアクセスしたいのですが、それが更新されていなければそれを使いたいからです。
質問です:
は、最初の呼び出しからのキャッシュされた応答にアクセスするための便利な方法はありますか?
(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クライアントのInit
@Bean
public HttpClient httpClient() {
return CachingHttpClients.createMemoryBound();
}