提问人:dmo 提问时间:9/21/2018 最后编辑:dmo 更新时间:1/23/2022 访问量:9197
如何修复iOS 12 Safari Cors印前检查错误?
How to fix iOS 12 Safari Cors preflight error?
问:
我试图更好地理解 COR,因为我们的 Web 应用程序的几个用户抱怨说,自从他们升级到 iOS 12 以来,他们收到了预检错误。
Web 检查器中的错误
[Error] Preflight response is not successful
[Error] Fetch API cannot load https://www.api.com due to access control checks.
[Error] Failed to load resource: Preflight response is not successful (v4, line 0)
客户端应用是带有 Apollo 的 React 应用。它使用 Apache HTTPD 和 Express JS 通过 HTTPS 调用服务器。
在所有其他浏览器上一切正常,这与iOS 12隔离。
奇怪的是,当我查看 HTTPD 访问日志时,我看不到任何预检调用。当我尝试直接点击服务器(在 iOS 12 上)时,我在日志中看到预检 OPTIONS 请求和 POST。但是,当通过 Web 应用调用服务器时,COR 预检失败。
在 express 应用程序中,我还注销了所有请求,但它也没有出现在那里。
在HTTPD中,我有以下设置
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS
在表达中,我也有同样的事情。
有什么想法吗?!
答:
这是 iOSv12 中的一个错误,但它已经在 iOSv12.1 beta (16B5059d) 中修复,假设当前的 beta 代码已投入生产。
问题是 iOSv12 WebKit 预检 OPTIONS 调用不会离开设备。我已经运行 WireShark 和 iOSv12 模拟器来确认这一点。
评论
如果您在 Ionic 中遇到错误,请删除此插件“cordova-plugin-ionic-webview”
评论
如果显示“Access-Control-Allow-Headers”中不允许 Header,您可以通过从服务器端添加特定的 Header 来修复它,您可以在其中发送“Access-Control-Allow-Headers”。因为通配符不起作用 即“Access-Control-Allow-Headers”: “*”
它应该是 “access-control-allow-headers”: “*, Accept, Content-Type, Content-Length, Accept-Encoding, CUSTOM-ALLOWED-HEADER”
对于遇到此问题的任何人来说,问题是 iOS12 不喜欢您有任何自定义标题。这在BETA版中得到了修复,但似乎从未进入正式版本。<add name="Access-Control-Allow-Headers" value="*" />
解决方案是单独指定每个自定义标头,例如:<add name="Access-Control-Allow-Headers" value="*,customheader1,customheader2" />
评论
https://www.api.com