首页 >web前端 >js教程 >为什么 iOS 6 上的 Safari 会缓存 $.ajax POST 请求,即使是在 cache=false 的情况下?

为什么 iOS 6 上的 Safari 会缓存 $.ajax POST 请求,即使是在 cache=false 的情况下?

Linda Hamilton
Linda Hamilton原创
2024-11-03 22:50:031040浏览

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

Safari 缓存 $.ajax 在 iOS 6 上的结果:分析

自 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 且立即过期:缓存将
  • Cache-Control: 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 会缓存 $.ajax POST 请求,即使是在 cache=false 的情况下?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn