首页 >web前端 >js教程 >为什么即使缓存设置为 False,iOS 6 Safari 也会缓存 $.ajax POST 请求?

为什么即使缓存设置为 False,iOS 6 Safari 也会缓存 $.ajax POST 请求?

Susan Sarandon
Susan Sarandon原创
2024-11-03 09:23:30236浏览

Why Does iOS 6 Safari Cache $.ajax POST Requests Even When Cache is Set to False?

iOS 6 Safari 缓存 $.ajax POST 请求

自 iOS 6 发布以来,用户报告在创建 $ 时出现意外的缓存行为Safari 的 Web 视图中的 .ajax POST 请求。尽管将缓存选项设置为 false,Safari 仍然会缓存响应。

原因

Safari 的激进缓存机制专门针对展示静态函数签名的 POST 请求,其中输入参数保持不变,只有返回的数据发生变化。默认情况下,Safari 会将此类请求视为可缓存,并存储其响应以供将来检索。

解决方案

要避免此缓存问题,请修改函数签名以引入动态范围。例如,不要使用:

getNewRecordID(intRecordType)

使用:

getNewRecordID(intRecordType, strTimestamp)

通过将时间戳或其他动态参数合并到函数签名中,Safari 会将请求识别为唯一的并避免缓存结果.

根本原因

Safari 的缓存行为源于对 HTTP 规范的解释,它允许在包含适当的 Cache-Control 或 Expires 标头时缓存 POST 响应。但是,Apple 的实现将此缓存扩展到了这些标头不存在或设置为“max-age=0”的情况。

No Cache-Control or Expires headers = iOS6 Safari will cache
Cache-Control max-age=0 and an immediate Expires = iOS6 Safari will cache
Cache-Control: no-cache = iOS6 Safari will NOT cache

解决方法

禁用缓存对于全局所有 POST 请求,将以下行添加到 Apache 配置中:

Header set Cache-Control "no-cache"

或者,您可以将此行为专门限制为 POST 请求:

SetEnvIf Request_Method "POST" IS_POST
Header set Cache-Control "no-cache" env=IS_POST

通过修改函数签名并结合这些缓存修改,您可以恢复 iOS 6 Safari 中的预期行为,并确保 POST 请求不会被缓存。

以上是为什么即使缓存设置为 False,iOS 6 Safari 也会缓存 $.ajax POST 请求?的详细内容。更多信息请关注PHP中文网其他相关文章!

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