簡體   English   中英

okhttp 客戶端什么時候緩存服務器響應?

[英]when does okhttp client cache the server response?

我在 java 中使用 okhttp 客戶端 3.5.0 來緩存響應,服務器響應具有以下緩存控制標頭:

緩存控制:私有,最大年齡=0,必須重新驗證

首先,我嘗試進行實際網絡調用以獲取服務器響應,然后在第二個請求中我想獲取緩存響應。

這是我的Java代碼:

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************

是成功:假

緩存響應:空

網絡響應:空

我是否遺漏了什么?

除非您閱讀並關閉響應正文,否則 OkHttp 不會緩存響應。 這就是觸發這些字節被下載和保存的原因。

try {
  if (response.cacheResponse() == null) {
    body.source().skip(Long.MAX_VALUE); // Exhaust response body.
  }
} finally {
  body.close();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM