快取難題:iOS 6 中Safari 的選擇性抓取
自iOS 6 發布以來,開發人員在Safari 的Web 視圖中遇到了意外行為: $儘管有cache:false 設置,.ajax POST 調用仍會被頑固地緩存。有趣的是,這種異常僅在被呼叫函數使用靜態簽章時才會出現。
初步調查顯示,Safari 僅在缺少 Cache-Control 或 Expires 標頭或 Cache-Control 設定為 max-age 時才會快取 POST 回應=0。然而,授予請求「Cache-Control: no-cache」會繞過此行為,從而完全阻止快取。
Apple 決定利用 POST 方法的 HTTP 規範規定(第 9.5 節)讓開發人員感到困惑。雖然快取 POST 回應並非聞所未聞,但 Safari 選擇在沒有任何標頭或 max-age=0 的情況下進行快取似乎與傳統瀏覽器行為有偏差。
為了解決此快取困境,內部提供了一個全域解決方案Apache 設定如下:
Header set Cache-Control "no-cache"
但是,如果首選選擇性地將「no-cache」指令僅應用於POST請求,Apache 提供了一個解決方案:
SetEnvIf Request_Method "POST" IS_POST Header set Cache-Control "no-cache" env=IS_POST
或者,向URL 或POST 資料添加唯一參數可以規避靜態函數簽署的快取問題。
以上是為什麼 Safari 在 iOS 6 中快取 POST 請求,儘管有「cache:false」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!