html5 appcache 在 IOS 11.3 上停止工作
Posted
技术标签:
【中文标题】html5 appcache 在 IOS 11.3 上停止工作【英文标题】:html5 appcache stoped working on IOS 11.3 【发布时间】:2018-04-06 13:52:07 【问题描述】:我们现在知道这是 ios 11.3 的问题,并且似乎只针对 Ipad。
当通过 appcache 请求资源时,cookie 会被丢弃。如果您的资源落后于某些身份验证。他们将被重定向到您的身份验证页面。
正如 Apple 所说,我们尝试了开启/关闭实验功能。
删除资源的身份验证不是一个有效的永久选项。
我们正在寻找解决方案,而下一个版本的 IOS 希望能解决这个问题,这似乎是 11.4 beta 2 的情况。为了降低风险,更改应尽可能小。
以下信息是我们在尝试解决问题时所经历的过程。直到今天,还没有尝试过有效的解决方案。 Service Worker 是最合理的路径。
第 1 天 我们有一个应用程序在生产环境中运行良好一段时间(自上次部署以来几乎一年)。
当 wifi 不可用时,我们的应用程序使用应用缓存来启用离线模式。 我们的应用程序主要用于带有 safari 的 ipad 和一些带有 chrome 的 Surface Pro。目前大多数情况下都是用 ipad 报告的。
最近几天,越来越多的用户开始遇到加载缓存的问题。更新到 11.3(无法在 iphone 11.3 上重现)并在开发机器上使用 google chrome 桌面隐身模式后,我们已经能够在 ipad 上重现问题。应用程序可在我们拥有的 10.3.3 版本的旧 iPad 上运行。
--Application Cache Error event: Resource fetch failed (2) http://localhost:63330/client/vendor/kendo-ui/kendo.all.js--
事实 - 它总是阻塞相同的文件,经过一些测试,似乎所有文件都大于 1.2Mb,在这种情况下,kendo 是 4.7Mb,缩小后的文件是 1.7Mb。 - Fiddler 不报任何错误,所有文件状态响应为 200
猜猜 1. Safari 和 chrome 的更新可能已更改 2. ipad 设置可能已被管理员更改 3.windows或ios的更新,可能会有一些变化
由于 safari 和 ios 遵循相同的版本(2018 年 3 月 29 日),它们可能是相关联的,最有可能的猜测是,有人知道为什么会发生这种情况吗?
在苹果支持页面上找不到太多关于 11.3 更改的内容https://support.apple.com/en-ca/HT208067https://support.apple.com/en-ca/HT201222
2018 年 4 月 9 日星期一更新 我们已经能够通过调试 Ipad 和我们拥有的 mac mini 来重现该问题。但是,问题有所不同,因此,我们目前以隐身模式放弃了我们在桌面上的 Chrome 上找到的内容。
以下是新的事实:
使用 appcache 下载文件时未提供 Cookie。第一个文件请求被拒绝并重定向到登录页面。[警告] ApplicationCache 已弃用。请使用 ServiceWorkers 反而。 (192.168.0.152,第 2 行) [错误] 加载资源失败: 服务器响应状态为 401(未授权)(cache.manifest, 第 0 行) [错误] 无法获取应用程序缓存清单, 因为清单有 401 响应。 [错误] 2018-04-09 12:01:51: 应用程序缓存错误 logMsg (logDecorator.js:111) 错误 (logDecorator.js:128) (匿名函数) (applicationCacheUpdateSrv.js:121) 调度 (jquery-1.10.2.js:5109) 句柄 (jquery-1.10.2.js:4780)
- 解决身份验证后,IDBDatabase出现问题,可能与我们删除的授权有关(目前正在调查中)
IndexedDB 请求错误(获取所有 rapports)-> NotFoundError: Failed to 在“IDBDatabase”上执行“事务”:指定对象之一 没有找到商店。
我们使用 Charles Proxy for Mac 发现了这一点。出于这个原因,我们删除了对静态文件和主页的身份验证。这似乎可行,但我们的文件将是公开的,这不是一个真正的选择。
类似的问题: Cache-Manifest How to handle authentication cookies?
2018 年 4 月 10 日星期一更新
IndexDB 错误不相关。由于缺少授权,数据库未正确初始化。
我们目前添加了一个不需要授权的替代主页,而不是从默认主页中删除授权。它会被清单缓存调用并正确下载。
2018 年 4 月 12 日星期一更新 我们试图保护静态文件,最终在查询 url 中添加了一个令牌。虽然它可以工作并且我们可以对请求进行身份验证(请注意,由于我们没有 cookie 来对用户进行身份验证,因此身份验证远非完美无缺),Url 现在与缓存主页中请求的内容不同,并进行自定义身份验证本身一文不值。
我们还需要根据用户生成的令牌重写缓存页面的所有 url。在我们的案例中,它涉及丢弃 ASP.Net MVC Bundle 功能来制作自定义功能?在这一点上,我们认为尝试 ServiceWorker 可能会更容易,因为 appcache 已被弃用。这并不能保证 cookie 会与 ServiceWorker 一起传递...
2018 年 4 月 19 日星期一更新 昨天我们从苹果那里得到了一些回报。他们要求在 Settings > Safari 中尝试 Prevent Cross-Site Tracking 属性(打开和关闭),并在 Settings > Safari > Advanced > Experimental 中尝试 Experimental feature(提到 ServiceWorkers,但都尝试了)
不幸的是,目前它对我没有任何改变。
注意:删除与问题没有直接关系的部分
2018 年 5 月 25 日星期五更新 在顶部添加了一个部分以恢复情况并使问题更切题。
【问题讨论】:
我正在处理完全相同的问题 - 目前没有找到解决方案。 @MichalKrawiec 我最近看到this video 显示了ServiceWorkers 的用法,它似乎比我们最初想象的要容易得多。希望对您有所帮助。 【参考方案1】:截至 2018 年 4 月 25 日,我们试用了 iOS 11.4 测试版,它似乎解决了这个问题。根据部署时间表,根据this,应该在一个月左右可以使用。
不过,在此之前,转向服务人员可能是一个好主意。
Here 是来自 google 的示例。Here 是介绍主题的视频
如果我们要转移到 Service Worker,我将添加一个示例
【讨论】:
以上是关于html5 appcache 在 IOS 11.3 上停止工作的主要内容,如果未能解决你的问题,请参考以下文章