通过appcache请求资源时,cookies被丢弃。如果您的资源处于某些身份验证之后,它们将被重定向到您的身份验证页面。
如苹果所述,我们尝试了实验功能开/关。
删除资源的身份验证不是一个有效的永久选项。
我们正在寻找解决方案,同时希望下一个版本的IOS能够修复这个问题,这似乎是11.4 beta 2的情况。更改应尽可能少以减少风险。
以下信息是我们尝试解决问题时经历的过程。迄今为止,没有尝试过有效的解决方案。Service Workers是最可行的路径。
第1天
我们有一个应用程序,在生产中运行良好(自上次部署以来已经有一年时间)。
我们的应用程序使用app cache在wifi不可用时启用离线模式。 我们的应用程序主要在iPad上使用Safari和一些Surface Pro上使用Chrome。目前大多数情况报告的是iPad。
最近几天,越来越多的用户开始在加载缓存时遇到问题。我们已经能够在 iPad 上重现这个问题(更新到了 11.3 版本后出现,但在 iPhone 11.3 上无法重现),并使用 Google Chrome 桌面版隐身模式在 dev 机器上测试。该应用程序可以在我们的一个旧 iPad 上正常工作,该 iPad 版本为 10.3.3。
-- 应用程序缓存错误事件:资源获取失败 (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日)发布,它们可能是相关的,最有可能的猜测是,有人知道为什么会发生这种情况吗?
在Apple支持页面上找不到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:APPLICATION CACHE错误
logMsg(logDecorator.js:111)
error(logDecorator.js:128)
(匿名函数)(applicationCacheUpdateSrv.js:121)
分派(jquery-1.10.2.js:5109)
处理(jquery-1.10.2.js:4780)
- 解决身份验证后的影响,我们在IDBDatabase方面遇到问题,可能与我们删除的Authorization相关(目前正在调查中)
我们使用Charles Proxy for Mac找到了这个问题。因此,我们取消了对静态文件和主页的身份验证。这似乎有效,但我们的文件将会是公开的,这不是一个真正的选择。IndexedDB请求错误(获取所有报告)-> NotFoundError:在“IDBDatabase”上执行“transaction”失败:找不到指定的对象存储。
类似的问题: Cache-Manifest 如何处理身份验证cookie? 2018年4月10日更新
我们试图保护静态文件,最终在查询URL中添加了一个令牌。虽然它可以工作并且我们可以验证请求(请注意,由于我们没有cookie来验证用户,身份验证远非完美),但URL现在与缓存的主页中请求的URL不同,并使自定义身份验证本身毫无价值。
我们需要根据用户生成的令牌,重写所有缓存页面的URL。在我们的情况下,这涉及抛弃ASP.Net MVC Bundle功能,可能要制作自定义功能?此时,我们认为尝试ServiceWorker可能会更容易,因为appcache已被弃用。但这并不能保证cookie会随着ServiceWorker传递...
更新于2018年4月19日星期一:我们昨天从苹果那里得到了一些回复。他们建议我们在“设置”>“Safari”中尝试“防止跨站点跟踪”属性(开和关都试一下),还要在“设置”>“Safari”>“高级”>“实验性”中尝试实验性功能(提到了ServiceWorkers,但是我们都试过了)。
不幸的是,目前这对我来说没有改变任何事情。
注:划掉了一些与问题直接无关的部分。
更新于2018年5月25日星期五:添加了一个部分来总结情况并使问题更加明确。