1

リクエストが 1 つ以上のリダイレクト ホップを通過するときに、キャッシュされたレスポンスで条件付き GET を使用して Volley を使用すると問題が発生します。

最初のリクエストで、サーバーが 302 で応答した場合、HTTP スタック (私はデフォルトの HurlStack を使用しています) は透過的にリダイレクトに従い、最終的に最終サーバーからの応答を返します。

後続のリクエストでは、Volley は If-Modified-Since ヘッダーを追加して条件付き GET を実行しますが、これらは最初のサーバーに送信されるため、リダイレクトする代わりに 304 応答を取得するだけで、リクエストが最終サーバーに到達することはありません。

Volley は基盤となる HTTP スタックと非常に疎結合であるため、キャッシュ ヘッダーは最終的な要求でのみ送信する必要があるという事実を伝える方法はありません。

私が見ることができる最善の解決策は (条件付き GET を送信しないことを除いて)、特定のヘッダーが特定の URL に属していることを認識し、適切な場合にのみそれらのヘッダーを送信するカスタム HttpUrlConnection 実装を作成することです。つまり、最終サーバーの URL をどこかに、おそらくカスタム ヘッダーとして保存して、他のヘッダーと一緒にキャッシュに保存する必要があります。

少しハッキリしない解決策は、リダイレクトを手動で処理するカスタム HttpStack 実装を作成することです。しかし、それは同じホストへのリダイレクトに接続を再利用できないことを意味するため、効率が低下します。

他の誰かがこの問題に遭遇し、より良い解決策を持っていますか? Volley や HttpUrlConnection に固有のものではないようですが、リダイレクトを透過的に処理する任意の HTTP ライブラリに固有のものです。どのヘッダーが特定の URL に関連付けられているかをどのように通知しますか?

4

0 に答える 0