html5 appcache 在 IOS 11.3 上停止工作

html5 appcache stoped working on IOS 11.3

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

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

正如 Apple 所说,我们尝试了实验功能 on/off。

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

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

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

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

我们的应用程序使用应用程序缓存在 wifi 不可用时启用离线模式。 我们的应用程序主要用于 ipad 的 safari 和一些 surface pro 的 chrome。目前大多数病例报告为 ipad.

最近几天,越来越多的用户开始加载缓存时遇到问题。在更新到 11.3(无法在 iphone 11.3 上重现)并在 dev [= 上使用 google chrome 桌面隐身模式后,我们已经能够在 ipad 上重现问题130=]嗨。应用程序在我们拥有的旧版本 iPad 上运行,版本为 10.3.3。

--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 的 Apple 支持页面上找不到太多更改
https://support.apple.com/en-ca/HT208067
https://support.apple.com/en-ca/HT201222

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

以下是新事实:

[Warning] ApplicationCache is deprecated. Please use ServiceWorkers instead. (192.168.0.152, line 2)
[Error] Failed to load resource: the server responded with a status of 401 (Unauthorized) (cache.manifest, line 0)
[Error] Application Cache manifest could not be fetched, because the manifest had a 401 response.
[Error] 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 request error (get all rapports) -> NotFoundError: Failed to execute 'transaction' on 'IDBDatabase': One of the specified object stores was not found.

我们通过使用 Mac 的 Charles 代理找到了这个。出于这个原因,我们删除了对我们的静态文件和主页的身份验证。这似乎可行,但我们的文件将是 public,这实际上不是一个选项。

类似问题: 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 日星期一更新
昨天我们从 Apple 收到了一些 return。他们要求在设置 > Safari 中尝试 Prevent Cross-Site Tracking 属性(打开和关闭),并在设置 > Safari > 高级 > 实验中尝试实验功能(提到 ServiceWorkers , 但都试过了)

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

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

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

截至 2018 年 4 月 25 日,我们尝试了 iOS 11.4 beta,它似乎解决了这个问题。根据部署时间表,根据 this.

,它应该会在大约一个月内可用

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

Here 是来自 google 的示例。
Here 是介绍主题的视频

如果我们转向服务工作者,我将添加一个示例