iOS 6 の Safari キャッシュの難題
iOS 6 での Safari の導入により、$.ajax 呼び出しのキャッシュ処理に関する懸念が生じています。具体的には、キャッシュ プロパティを明示的に false に設定しているにもかかわらず、PhoneGap アプリケーション内で行われた POST リクエストがキャッシュされます。
根本原因
徹底的な調査の結果、次のことが判明しました。 Safari は、次の基準に基づいて POST を選択的にキャッシュします。
HTTP 仕様に従って、POST 応答は通常キャッシュできません。ただし、iOS 6 の Safari は、適切な Cache-Control ヘッダーまたは Expires ヘッダーを使用してキャッシュを許可する規定を悪用しているようです。
回避策
Safari が POST をキャッシュしないようにするにはリクエストの場合、レスポンスヘッダーに「Cache-Control: no-cache」を設定する必要があります。これにより、Safari がキャッシュ バイパス ディレクティブを確実に遵守するようになります。
すべての POST に適用されるグローバル ソリューションの場合、サーバー設定に次のコードを追加します。
<code class="apache">Header set Cache-Control "no-cache"</code>
のみを無効にする場合は、特定の POST をキャッシュするには、次のコードを使用できます。
<code class="apache">SetEnvIf Request_Method "POST" IS_POST Header set Cache-Control "no-cache" env=IS_POST</code>
注: リクエスト パラメーターが同じであれば、Safari は引き続き POST リクエストをキャッシュします。キャッシュを回避するには、呼び出しごとにリクエスト パラメータを変更します。あるいは、リクエスト URL または POST データにランダムなパラメータを追加して、一意性を確保することもできます。
以上がキャッシュ制御設定にもかかわらず、iOS 6 で Safari が POST リクエストをキャッシュするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。