HTML5 AppCache在iOS 11.3(仅iPad)失效的解决方案求助
我这边已经确认清楚问题的细节了:
- 这是iOS 11.3独有的bug,而且只在iPad设备上触发
- 当通过AppCache请求受身份验证保护的资源时,请求里的Cookie会被直接丢弃,导致请求被自动重定向到认证页面
我们已经试过按照Apple官方建议,开启/关闭相关实验性功能,但没起到作用;另外,移除资源的身份验证显然不是长久之计,毕竟安全性没法保障。
针对这个问题,给你几个临时解决方案的思路:
- 替换AppCache为Service Worker:如果你的应用架构允许,Service Worker在资源缓存和Cookie处理上的兼容性要稳定得多,完全可以避开AppCache的这个特定bug。iOS 11.3及以上设备已经支持Service Worker,迁移成本不会太高。
- 手动在请求中附加Cookie:在发起AppCache资源请求前,先从
document.cookie里提取认证相关的Cookie值,然后用XMLHttpRequest或fetch请求资源时,手动把Cookie添加到请求头的Cookie字段中。不过要注意跨域场景下的Cookie规则,避免出现跨域问题。 - 临时绕过AppCache缓存:对于必须加载的关键资源,可以在URL末尾添加一个不影响内容的唯一参数(比如当前时间戳
?t=${Date.now()}),强制请求跳过AppCache缓存,直接从服务器获取,这样Cookie就能正常携带。但这个方法会失去离线缓存的优势,只适合应急使用。
内容的提问来源于stack exchange,提问作者Kadgiko
相关产品推荐
相关产品推荐

