Java okhttp客户端何时缓存服务器响应?
我正在使用java中的okhttp client 3.5.0缓存响应,服务器响应具有以下缓存控制头: 缓存控制:专用,最大年龄=0,必须重新验证 首先,我尝试进行实际的网络调用以获取服务器响应,然后在第二个请求中,我希望获取缓存响应 以下是我的java代码:Java okhttp客户端何时缓存服务器响应?,java,okhttp,Java,Okhttp,我正在使用java中的okhttp client 3.5.0缓存响应,服务器响应具有以下缓存控制头: 缓存控制:专用,最大年龄=0,必须重新验证 首先,我尝试进行实际的网络调用以获取服务器响应,然后在第二个请求中,我希望获取缓存响应 以下是我的java代码: HttpUrl.Builder httpUrlBuilder = HttpUrl.parse(serverUrl).newBuilder(); HttpUrl httpUrl = httpUrlBuilder.build(); Requ
HttpUrl.Builder httpUrlBuilder = HttpUrl.parse(serverUrl).newBuilder();
HttpUrl httpUrl = httpUrlBuilder.build();
Request request = new Request.Builder()
.url(httpUrl)
.cacheControl(new CacheControl.Builder().maxAge(1, TimeUnit.DAYS).build())
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
System.out.println("***************Response 1**************");
System.out.println("isSucess:"+response.isSuccessful());
Response text = response.cacheResponse();
System.out.println("Cached Response:" + text);
Response networkResponse = response.networkResponse();
System.out.println("Network Response ::" +networkResponse);
}
});
Thread.sleep(5000);
Request request2 = new Request.Builder()
.cacheControl(new CacheControl.Builder().onlyIfCached().build())
.url(httpUrlBuilder.build())
.build();
call = okHttpClient.newCall(request2);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
System.out.println("***********Response 2************");
System.out.println("isSucess:" +response.isSuccessful());
final Response text = response.cacheResponse();
System.out.println("Cached Response:" + text);
Response networkResponse = response.networkResponse();
System.out.println("Network Response:" +networkResponse);
}
});
下面是第二个请求输出:(部分输出)
***********答复2************
Issuccess:错误
缓存响应:null
网络响应:空
我是否遗漏了任何内容?确定除非读取并关闭响应正文,否则HTTP不会缓存响应。这就是触发下载和保存这些字节的原因
try {
if (response.cacheResponse() == null) {
body.source().skip(Long.MAX_VALUE); // Exhaust response body.
}
} finally {
body.close();
}
谢谢,杰西。但是服务器缓存控制头呢?我需要添加什么吗?在HTTP中,服务器可以设置其资源的缓存策略。您应该与服务器的维护人员确认缓存策略是适当的。