3

サーバーを制御できず、Cache-Control: no-cacheヘッダーで常に応答します。しかし、私は OkHttp にその応答を強制的にキャッシュさせたいと思っています。

キャッシュされる前に、どうにかして OkHttp 応答からヘッダーを削除できますか?

4

2 に答える 2

2

実際、レスポンスの Cache-Control ヘッダーを書き換えて、OkHttp がキャッシュできるようにすることができます。サイトのレシピから ( https://github.com/square/okhttp/wiki/Interceptors )

private static final Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() {
    @Override public Response intercept(Interceptor.Chain chain) throws IOException {
    Response originalResponse = chain.proceed(chain.request());
    return originalResponse.newBuilder()
        .header("Cache-Control", "max-age=60")
        .build();
  }
};

client.addNetworkInterceptor() を使用して、これをネットワーク インターセプターとして追加するだけです。

于 2016-08-27T20:29:15.700 に答える
0

ヘッダーを削除することはできませんがno-cache、条件付き GET を介してキャッシュを取得することはできます。

OkHttp のCache-Controlドキュメントから:

応答では、このフィールドの名前「no-cache」は誤解を招く可能性があります。応答をキャッシュすることを妨げるものではありません。これは、応答を返す前にオリジン サーバーで応答を検証する必要があることを意味するだけです。条件付き GET でこれを行うことができます。

no-cache、応答の保存を妨げません! 後で OkHttp がそのキャッシュされた応答を使用しようとすると、If-Modified-Sinceヘッダーを使用してオリジン サーバーに接続することにより、キャッシュされた応答がまだ有効であることを検証します。サーバーが を返した場合304 Not Modified、応答本文はキャッシュから提供されます。

リクエスト ヘッダーに max-stale を追加することで、キャッシュ ヒットの可能性を高めることができます。これにより、365 日前に有効期限が切れた応答に対してキャッシュが使用されます。

Cache-Control: max-stale=31536000
于 2014-06-02T14:14:25.060 に答える