首页  >  文章  >  web前端  >  为什么 Safari 在 iOS 6 中缓存 POST 请求,尽管有“cache:false”?

为什么 Safari 在 iOS 6 中缓存 POST 请求,尽管有“cache:false”?

DDD
DDD原创
2024-11-03 21:12:03189浏览

Why Does Safari Cache POST Requests in iOS 6 Despite

缓存难题: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中文网其他相关文章!

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