html5 appcache停止工作在IOS 11.3上

时间:2018-04-06 13:52:07

标签: ios google-chrome safari html5-appcache

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

通过appcache请求资源时,cookie将被丢弃。如果你的资源是一些身份验证的背后。它们将被重定向到您的身份验证页面。

正如Apple所说,我们尝试开启/关闭实验功能。

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

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

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

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

我们的应用程序使用应用程序缓存在无法使用wifi时启用离线模式。 我们的应用程序主要用于带有safari的ipad和带有chrome的一些表面专业版。目前大多数病例都是用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.管理员可能已更改了ipad设置  3.对Windows或ios的更新可能会发生一些变化

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

无法在苹果支持页面上找到11.3的更改 https://support.apple.com/en-ca/HT208067
https://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:   应用程序CACHE错误
      logMsg(logDecorator.js:111)
      错误(logDecorator.js:128)
      (fonction anonyme)(applicationCacheUpdateSrv.js:121)
      dispatch(jquery-1.10.2.js:5109)
      handle(jquery-1.10.2.js:4780)

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

<击>   

IndexedDB请求错误(获得所有支持) - &gt; NotFoundError:失败   执行交易&#39; on&#39; IDBDatabase&#39;:指定对象之一   找不到商店。   

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

类似的问题: Cache-Manifest How to handle authentication cookies?

更新2018年4月10日星期一
<击> IndexDB错误无关。由于授权缺失,数据库未正确初始化

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

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

我们还需要重写用户生成的令牌的缓存页面的所有URL。在我们的例子中,它涉及抛出ASP.Net MVC Bundle功能,可能会自定义一个?此时,我们认为尝试ServiceWorker可能更容易,因为不推荐使用appcache。这并不保证cookie将与ServiceWorker一起传递...

更新2018年4月19日星期一
昨天我们从Apple获得了一些回报。他们要求在设置&gt;中尝试防止跨站点跟踪属性(打开和关闭) Safari并在设置&gt;中尝试实验功能Safari&gt;高级&gt;实验(提到ServiceWorkers,但尝试了所有)

不幸的是,目前我没有改变任何事情。

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

更新2018年5月25日
在顶部添加了一个部分以恢复情况,并提出更多问题。

1 个答案:

答案 0 :(得分:2)

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

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

Here是谷歌的一个例子 Here是一段视频,介绍了主题

如果我们转移到服务工作者

,我会添加一个例子