2017-01-12 2 views
0

レスポンスが新しいかどうかを確認する最適な方法は何ですか?キャッシュから来ない?これの根拠は、資産が変更された場合にのみ高価な処理を行いたいということです。okhttpレスポンスが新鮮であるかどうかを確認する

現在、我々は次のようにあります

if ((response.networkResponse() != null && 
       response.networkResponse().code() == HTTP_NOT_MODIFIED) || 
       response.cacheResponse() != null) 

これは、これを達成するための正しい/最高/簡潔な方法であれば、私は疑問に思います。

+0

レスポンスヘッダーにタイムスタンプを追加して、この応答の経過時間を知ることはできませんか?キャッシュのファンではないので、私は何かが恋しくなるかもしれません;) – AxelH

+0

これはCDNを通じて提供されるので、標準的なHTTPの実践に干渉したくないです。上のコードはうまくいきます(私は信じています)、これがokhttpでこれを行う最善の方法であるかどうかは分かりません。 – Roman

答えて

0

キャッシュレスポンスがまったくない場合、レスポンスはキャッシュから提供されました。ネットワークレスポンスを確認する必要はありません。

+0

最初のリクエストではnullになりますか?私はokhttpの内部を知らないのですが、キャッシュを有効にして以来、おそらくその動作は「ライトスルー」で、cachedResponseは常に!= nullです。 – Roman

+0

'cacheResponse()'は、キャッシュが使用された場合にのみnullになりません。 –

+0

@Roman私は同じ問題を抱えていました。つまり、すべてのレスポンスに対して 'cacheResponse()!= null'という問題がありました。私は[この問題](https://github.com/square/okhttp/issues/3248)と[この回答](https://stackoverflow.com/questions/41727750/detect-if-okhttp-response-comes -from-cache-with-retrofit/41729479#41729479)、これの背後にある理由を説明しています。レスポンスがキャッシュから完全に来るかどうかをチェックしたいなら、 'cacheResponse()!= null && networkResponse()== null'をチェックします。 – user2340612

関連する問題