ホームページ >ウェブフロントエンド >jsチュートリアル >キャッシュが False に設定されている場合でも、iOS 6 Safari が $.ajax POST リクエストをキャッシュするのはなぜですか?

キャッシュが False に設定されている場合でも、iOS 6 Safari が $.ajax POST リクエストをキャッシュするのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-03 09:23:30238ブラウズ

Why Does iOS 6 Safari Cache $.ajax POST Requests Even When Cache is Set to False?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。