现在,我们知道这是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浏览器中找到的内容。
以下是新事实:
[警告]不建议使用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/