首頁 >web前端 >js教程 >儘管有快取控制設置,為什麼 Safari 仍會在 iOS 6 中快取 POST 請求?

儘管有快取控制設置,為什麼 Safari 仍會在 iOS 6 中快取 POST 請求?

Susan Sarandon
Susan Sarandon原創
2024-11-09 16:22:02786瀏覽

Why Does Safari Cache POST Requests in iOS 6 Despite Cache Control Settings?

iOS 6 中的Safari 快取難題

iOS 6 中Safari 的引入引起了人們對其$.ajax 調用的快取處理的擔憂。具體來說,儘管明確將快取屬性設為 false,但 PhoneGap 應用程式中發出的 POST 請求仍會被快取。

根本原因

經過徹底調查,發現Safari 根據以下條件選擇性地快取POST:

  • 缺少Cache-Control標頭
  • 存在「Cache-Control: max-age=0」和立即「Expires」標頭

根據 HTTP 規範,POST 回應通常無法快取。然而,iOS 6 上的 Safari 似乎正在利用一項允許使用適當的 Cache-Control 或 Expires 標頭進行快取的規定。

解決方法

防止 Safari 快取 POST要求時,需要在回應標頭中設定「Cache-Control: no-cache」。這可確保 Safari 遵循快取旁路指令。

對於適用於所有POST 的全域解決方案,請將以下程式碼新增至伺服器設定:

<code class="apache">Header set Cache-Control "no-cache"</code>

如果您只想停用快取特定的POST,可以使用以下程式碼:

<code class="apache">SetEnvIf Request_Method "POST" IS_POST
Header set Cache-Control "no-cache" env=IS_POST</code>

注意:如果請求參數不變,Safari 仍會快取POST請求。為了避免緩存,請修改每次呼叫的請求參數。或者,您可以將隨機參數附加到請求 URL 或 POST 資料以確保唯一性。

以上是儘管有快取控制設置,為什麼 Safari 仍會在 iOS 6 中快取 POST 請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn