ios - html5 appcache在IOS 11.3上停止工作

标签 ios google-chrome safari html5-appcache

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

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

如Apple所述,我们尝试打开/关闭实验功能。

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

我们正在寻找解决方案,而IOS的下一版本有望解决此问题(对于11.4 beta 2来说似乎如此)。更改应尽可能少以降低风险。

以下信息是我们尝试解决问题时所要经过的过程。迄今为止,尚未尝试有效的解决方案。服务人员是最合理的途径。

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

当wifi不可用时,我们的应用程序使用应用程序缓存来启用离线模式。
我们的应用程序主要用于带有Safari的ipad和带有chrome的Surface pro。当前大多数情况是通过ipad报告的。

在过去的几天中,越来越多的用户开始无法加载缓存。更新至11.3后(在iphone 11.3上无法重现)并在开发机上使用google chrome桌面隐身模式,我们已经能够在ipad上重现问题。我们在版本为10.3.3的旧iPad上进行应用程序工作。

--Application Cache Error事件:资源获取失败(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浏览器中找到的内容。

以下是新事实:

  • 使用appcache下载文件时未提供Cookies。第一个文件请求被拒绝并重定向到登录页面。

  • [警告]不建议使用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请求错误(获取所有关系)-> NotFoundError:失败
    在'IDBDatabase'上执行'transaction':指定的对象之一
    找不到商店。


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

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

    更新2018年4月10日星期一

    与IndexDB错误无关。由于缺少授权,数据库未正确初始化。

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

    更新2018年4月12日星期一
    我们试图保护静态文件,最后在查询URL中添加了 token 。虽然它可以正常工作并且我们可以对请求进行身份验证(请注意,由于我们没有Cookie可以对用户进行身份验证,所以身份验证远非完美无缺),Url现在不同于在缓存的主页中进行的自定义身份验证本身就一文不值。

    我们还需要根据用户生成的 token 重写缓存页面的所有url。在我们的案例中,它涉及抛出ASP.Net MVC捆绑包功能,也许可以进行自定义?在这一点上,我们认为尝试使用ServiceWorker可能会更容易,因为appcache已被弃用。这不保证cookie将随ServiceWorker一起传递...

    更新2018年4月19日星期一
    昨天我们从苹果公司得到了一些回报。他们要求尝试在“设置”>“Safari”中阻止“跨站点跟踪”属性(打开和关闭),并尝试在“设置”>“Safari”>“高级”>“实验”中使用“实验性”功能(提及ServiceWorkers,但尝试了所有方法)

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

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

    更新于2018年5月25日
    在顶部添加了一个部分来恢复情况并使问题更突出。

    最佳答案

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

    但是,在那之前转为服务人员可能是一个好主意。

    Here是Google的一个示例。
    Here是介绍该主题的视频

    如果我们要转到服务人员,我将添加一个示例

    关于ios - html5 appcache在IOS 11.3上停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49694395/

    相关文章:

    ios - 动画如何进行单元测试?

    web - IOS 11 Safari 记住相机权限

    ios - ContainerView - 隐形 View 的关闭程度

    ios - 如何检测 Firebase 存储文件是否存在?

    css - -webkit-clip-path 不适用于 Chrome?

    Python/Selenium - 代码中的注释显然在触发 NoSuchElementException 方面有所不同

    html - Chrome 和 Firefox 的布局差异,与 float 和显示有关 : table

    ssl - Safari 不断重新加载带有自定义 CA 证书的页面

    gradle - Vaadin 14 生产模式和 Safari 问题

    ios - SwiftUI 耗费了我一上午的时间,只是构建了一个小按钮,请救救我