ホームページ >ウェブフロントエンド >jsチュートリアル >キャッシュが False に設定されている場合でも、iOS 6 Safari が $.ajax POST リクエストをキャッシュするのはなぜですか?
iOS 6 Safari の $.ajax POST リクエストのキャッシュ
iOS 6 のリリース以来、$ を作成するときに予期しないキャッシュ動作が発生することがユーザーから報告されています。 Safari の Web ビュー内の .ajax POST リクエスト。キャッシュ オプションを false に設定しているにもかかわらず、Safari は応答を永続的にキャッシュします。
原因
Safari の積極的なキャッシュ メカニズムは、静的関数シグネチャを示す POST リクエストを特にターゲットにしています。パラメータは一定のままで、返されるデータのみが変化します。デフォルトでは、Safari はそのようなリクエストをキャッシュ可能とみなし、将来の取得に備えてレスポンスを保存します。
解決策
このキャッシュの問題を回避するには、関数シグネチャを変更して動的パラメータ。たとえば、
getNewRecordID(intRecordType)
の代わりに、
getNewRecordID(intRecordType, strTimestamp)
を使用します。タイムスタンプまたはその他の動的パラメータを関数シグネチャに組み込むことにより、Safari はリクエストを一意のものとして認識し、結果のキャッシュを回避します。 .
根本的な理由
Safari のキャッシュ動作は、適切な Cache-Control ヘッダーまたは Expires ヘッダーが含まれている場合に POST 応答のキャッシュを許可する HTTP 仕様の解釈に由来しています。 。ただし、Apple の実装では、これらのヘッダーが存在しないか、「max-age=0」に設定されているシナリオにもこのキャッシュが拡張されています。
No Cache-Control or Expires headers = iOS6 Safari will cache Cache-Control max-age=0 and an immediate Expires = iOS6 Safari will cache Cache-Control: no-cache = iOS6 Safari will NOT cache
回避策
キャッシュを無効にするにはすべての POST リクエストに対してグローバルに次の行を Apache 設定に追加します:
Header set Cache-Control "no-cache"
または、この動作を POST リクエストに限定して制限することもできます:
SetEnvIf Request_Method "POST" IS_POST Header set Cache-Control "no-cache" env=IS_POST
関数シグネチャを変更するこれらのキャッシュ変更を組み込むことで、iOS 6 Safari 内で予期される動作を復元し、POST リクエストがキャッシュされないようにすることができます。
以上がキャッシュが False に設定されている場合でも、iOS 6 Safari が $.ajax POST リクエストをキャッシュするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。