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