応答と、応答ヘッダーの Last-Modified および Date を返す API 要求があります。HTTP.GET リクエストを作成するために HttpUrlConnection を使用しています。また、HttpResponseCache を使用して応答をキャッシュしています。
サーバーが応答コード 200 を返すと、応答がキャッシュされます。私は今、2つの問題に直面しています。
First : API が 2 回目に要求されると、HttpUrlConnection は、'Last-Modified' ヘッダーの値を使用する代わりに、'Date' ヘッダーの値を 'If-Modified-Since' ヘッダーとして設定します。
キャッシュされた応答から If-Modified-Since ヘッダーを手動で設定することで、この問題を解決しました。そのため、サーバーは 2 回目の API 要求で 304 を返します。
これが私の2番目の問題です。
2 番目:通常、サーバーが 304 を返し、応答がキャッシュされている場合、HttpUrlConnection はキャッシュされた応答を返し、応答コードは 200 になります。ただし、Last-Modified ヘッダーのみを含む応答の場合、HttpUrlConnection は応答コードを 304 自体として返し、キャッシュされた応答を返しません。同様の問題に遭遇した人はいますか?
API リクエストの Java 実装を以下に示します。
URL url = new URL(this.url);
HttpURLConnection conn = getProtocolType(url);
conn.setRequestMethod("GET");
conn.setReadTimeout(timeOut);
conn.setConnectTimeout(timeOut);
conn.setInstanceFollowRedirects(true);
conn.setRequestProperty("User-Agent", this.userAgent);
conn.setRequestProperty("Cache-Control", "max-age=0");
conn.setUseCaches(true);
conn.setDefaultUseCaches(true);
conn.connect();
this.responseCode = conn.getResponseCode();