キャッシュの難題: iOS 6 での Safari の選択的フェッチ
iOS 6 のリリース以来、開発者は Safari の Web ビューで予期しない動作に遭遇しました: $ .ajax POST 呼び出しは、cache:false 設定にもかかわらず、頑固にキャッシュされます。興味深いことに、この異常は、呼び出された関数が静的署名を使用している場合にのみ発生します。
予備調査により、Safari が POST 応答をキャッシュするのは、Cache-Control または Expires ヘッダーが欠落している場合、または Cache-Control が max-age に設定されている場合のみであることが判明しました。 =0。ただし、リクエスト「Cache-Control: no-cache」を許可すると、この動作がバイパスされ、キャッシュが完全に防止されます。
この HTTP 仕様規定を POST メソッド (セクション 9.5) に利用するという Apple の決定は、開発者を当惑させました。 POST 応答をキャッシュすることは前例のないことではありませんが、Safari がヘッダーなしで、または max-age=0 を使用してキャッシュするという選択は、従来のブラウザーの動作から逸脱しているように思えます。
このキャッシュの問題を解決するには、次のようなグローバル ソリューションが必要です。 Apache の設定は次のとおりです:
Header set Cache-Control "no-cache"
ただし、POST リクエストのみに「no-cache」ディレクティブを選択的に適用することが望ましい場合、Apache は解決策を提供します。
SetEnvIf Request_Method "POST" IS_POST Header set Cache-Control "no-cache" env=IS_POST
代替案、URL または POST データに一意のパラメータを追加すると、静的関数シグネチャのキャッシュの問題を回避できます。
以上が「cache:false」にもかかわらず、iOS 6 で Safari が POST リクエストをキャッシュするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。