5

応答と、応答ヘッダーの 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();
4

0 に答える 0