サンプルデモアプリケーションの中で、React Nativeを使用してネットワークコールを行っています。フードの下でReact NativeはNSURLSession
とNSURLRequestUseProtocolCachePolicy
をデフォルトのキャッシュポリシーとして使用します。ネットワーク呼び出しが行われると、サービスによって返される応答は、これらのキャッシュコントロールヘッダーが含まれています。私は気づくことができるよ何NSURLSessionでReact Nativeを使用してmust-revalidateを使用する
public, max-age=10, must-revalidate
はmax-revalidate
が存在する場合NSURLSession
は10
秒を尊重しないということです。逆に、新しいネットワークコールが10
秒以内に行われた場合は、後者が存在しない場合は、キャッシュ応答が返されます。それ以外の場合は新しい呼び出しが行われます。
14.9.4 Cache Revalidation and Reload Controlsセクションに基づいて、これは予想される動作ではないはずですが、多分私は間違っています。
キャッシュは、サーバの指定 有効期限を無視するように構成することができ、クライアントの要求は(同様の効果を持っている)MAX-古い ディレクティブが含まれる可能性があるため、プロトコルはまたのために 機構を備えているので後続の使用時にキャッシュの再検証を要求するオリジンサーバ エントリmust-revalidate命令がキャッシュによって受信された応答に存在する である場合、そのキャッシュは、最初に にオリジンサーバで再検証せずに、後の要求に応答するために失効した後に使用してはならない。 ( オリジンサーバののみに基づいて、場合Ieは、キャッシュ が期限切れになるか、最大エージング値、エンド・ツー・エンドの再検証を毎回行う必要があります、キャッシュされたレスポンスが古く です。)私が見つけた
このテーマに関する有用な議論:HTTP Cache Control max-age, must-revalidate。議論に基づいて、プロトコルがここにあいまいなビット
あるようですが、実際には、私は が、それは関係なく、最大エージングの再検証しなければならないことを意味-再検証する必要があることを発見しました。
A非常に奇妙なことは、私は両方のmax-age
とmust-revalidate
を使用して、Androidのと同じことを行う場合の動作が正しいことです。 10
秒後に新しいリクエストが行われます。 秒以内に要求は行われません。
ヒント?