ホームページ  >  記事  >  ウェブフロントエンド  >  iOS 6 の Safari が、cache=false であっても $.ajax POST リクエストをキャッシュするのはなぜですか?

iOS 6 の Safari が、cache=false であっても $.ajax POST リクエストをキャッシュするのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-03 22:50:031007ブラウズ

Why Does Safari on iOS 6 Cache $.ajax POST Requests Even with cache=false?

iOS 6 での Safari の $.ajax キャッシュ結果: 分析

iOS 6 のリリース以来、Safari の Web ビュー キャッシュ $ に関する懸念が生じています。 .ajax 呼び出し。キャッシュ属性を明示的に「false」に設定しているにもかかわらず、特に同じ入力パラメータを一貫して受け取る静的関数シグネチャを持つ POST メソッドの場合、予期しないキャッシュ動作が継続します。

根本原因

調査により、iOS 6 の Safari は、Cache-Control ヘッダーがないか、「Cache-Control: max-age=0」を含む POST リクエストをキャッシュしていることが判明しました。これは、POST 応答の非キャッシュ性を尊重する他のブラウザとは異なります。

回避策

グローバルにキャッシュを防ぐ唯一の効果的な解決策は、「Cache-Control」を設定することです。 : キャッシュなし。」このヘッダーはキャッシュを明示的に禁止します。

  • Cache-Control または Expires ヘッダーなし: キャッシュが発生します。
  • Cache-Control max -age=0 および即時 Expires: キャッシュが発生します。
  • キャッシュ制御: no-cache: キャッシュは発生しません。

Apache 構成

Apache でこの回避策を実装するには、構成ファイルに次の行を追加します:

Header set Cache-Control "no-cache"

または、この動作を POST リクエストのみに制限するには:

SetEnvIf Request_Method "POST" IS_POST
Header set Cache-Control "no-cache" env=IS_POST

補足事項

キャッシュは、POST リクエストのパラメーターと URL が変更されていない場合にのみ発生することに注意してください。 URL または POST ペイロードにランダム データを導入すると、キャッシュの問題を回避できます。

以上がiOS 6 の Safari が、cache=false であっても $.ajax POST リクエストをキャッシュするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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