サーバーを制御できず、Cache-Control: no-cacheヘッダーで常に応答します。しかし、私は OkHttp にその応答を強制的にキャッシュさせたいと思っています。
キャッシュされる前に、どうにかして OkHttp 応答からヘッダーを削除できますか?
サーバーを制御できず、Cache-Control: no-cacheヘッダーで常に応答します。しかし、私は OkHttp にその応答を強制的にキャッシュさせたいと思っています。
キャッシュされる前に、どうにかして OkHttp 応答からヘッダーを削除できますか?
実際、レスポンスの 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() を使用して、これをネットワーク インターセプターとして追加するだけです。
ヘッダーを削除することはできませんが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