html5 appcache 在 IOS 11.3 上停止工作



我们现在知道这是IOS 11.3的问题,似乎只针对Ipad。

当通过应用程序缓存请求资源时,cookie 将被丢弃。如果您的资源位于某些身份验证后面。它们将被重定向到您的身份验证页面。

正如Apple所提到的,我们尝试了实验功能的开/关。

删除资源身份验证不是有效的永久选项。

我们正在寻找解决方案,而下一个版本的IOS希望解决这个问题,这似乎是11.4 beta 2的情况。应尽可能减少更改以降低风险。

以下信息是我们在尝试解决问题时所经历的过程。直到今天,还没有尝试过有效的解决方案。服务工作者是最合理的路径。

第 1
天 我们有一个应用程序在生产环境中运行良好一段时间(自上次部署以来将近一年)。

我们的应用程序使用应用程序缓存在 wifi 不可用时启用离线模式。 我们的应用程序主要用于带有野生动物园的ipad和一些带有铬的Surface Pro。目前,大多数病例都是通过ipad报告的。

在过去的几天里,越来越多的用户开始在加载缓存时遇到问题。在更新到 11.3(无法在 iPhone 11.3 上重现)并在开发机器上使用谷歌浏览器桌面隐身模式后,我们已经能够在 iPad 上重现问题。我们在较旧的iPad上工作,版本为10.3.3。

-

-应用程序缓存错误事件:资源提取失败 (2) http://localhost:63330/client/vendor/kendo-ui/kendo.all.js--

事实
- 它总是阻止相同的文件,经过一些测试,它似乎是所有大于 1.2Mb 的文件,在这种情况下,剑道是 4.7Mb,缩小的是 1.7Mb。
- Fiddler 不报告任何错误,所有文件状态响应为 200


1.对 Safari 和 chrome 的更新可能已更改
2.管理员 3 可能更改了 iPad 设置
。对Windows或ios的更新可能会更改某些内容

由于 safari 和 ios 遵循相同的版本(29 Mar 2018),它们可能是链接的,最有可能的猜测,有人知道为什么会发生这种情况吗?

在 Apple 支持页面上找不到太多 11.3
https://support.apple.com/en-ca/HT208067
https://support.apple.com/en-ca/HT201222 的更改

更新星期一 9四月 2018
我们已经能够通过调试 Ipad 和我们拥有的 mac mini 来重现该问题。但是,问题是不同的,因此,我们目前以隐身方式丢弃了我们在桌面上的Chrome上找到的内容。

以下是新的事实:

  • 使用应用程序缓存下载文件时不提供 Cookie。第一个文件请求被拒绝并重定向到登录页面。

[警告] 应用程序缓存已弃用。请使用服务工作者 相反。(192.168.0.152,第 2 行)
[错误] 无法加载资源: 服务器响应状态为 401(未授权)(cache.manifest, 第 0 行)
[错误] 无法获取应用程序缓存清单, 因为清单有 401 响应。
[错误] 2018-04-09 12:01:51 : APPLICATION CACHE error logMsg (logDecorator.js:111)error (logDecorator.js:128)(fonction anonyme) (applicationCacheUpdateSrv.js:121)dispatch (jquery-1.10.2.js:5109)handle (jquery-1.10.2.js:4780)




- 解决身份验证后,我们的IDBDatabase出现问题,可能与我们删除的授权有关(目前正在调查中)

IndexedDB 请求错误(获取所有 rapports)-> NotFoundError:未能 在"IDBDatabase"上执行"事务":指定对象之一 未找到商店。

我们通过使用 Charles Proxy for Mac 找到了这一点。因此,我们删除了对静态文件和主页的身份验证。这似乎有效,但是我们的文件将是公开的,这不是一个真正的选择。

类似问题: 缓存清单 如何处理身份验证 Cookie?

更新星期一 10 四月 2018
索引数据库错误不相关.由于缺少授权,数据库未正确初始化。

我们目前添加了一个不需要授权的替代主页,而不是从默认主页中删除授权。它将由清单缓存调用并正确下载。

更新星期一 12 四月 2018
我们试图保护静态文件,最终在查询 url 中添加了一个令牌。虽然它可以工作并且我们可以对请求进行身份验证(请注意,由于我们没有 cookie 来验证用户,因此身份验证远非完美无缺),但 URL 现在与缓存主页中请求的内容不同,并使自定义身份验证本身毫无价值。

我们还需要重写缓存页面基于用户生成的令牌的所有 URL。在我们的案例中,它涉及抛弃 ASP.Net MVC 捆绑包功能以可能进行自定义功能?在这一点上,我们认为尝试 ServiceWorker 可能更容易,因为 appcache 已被弃用。这并不能保证 cookie 会通过 ServiceWorker 传递...

更新星期一19四月2018我们
昨天从苹果公司得到了一些回报。他们要求尝试在 Safari>设置中尝试防止跨站点跟踪属性(打开和关闭),并尝试 Safari>设置中的实验性功能>高级>实验性(提到 ServiceWorkers,但都尝试了)

不幸的是,目前它并没有改变我的任何内容。

注意:删除线部分与问题没有直接关系

2018年5月25日星期五更新在顶部添加了一个部分以恢复情况并使问题更加切中要害。

截至2018年4月25日,我们尝试了iOS 11.4测试版,它似乎解决了这个问题。根据部署时间表,它应该在大约一个月内可用。

然而,在此之前,转向服务工作者可能是一个好主意。

这是谷歌的一个例子。
这是一个视频,介绍了该主题

如果我们要移动到服务工作者,我将添加一个示例

最新更新