我们在装有 iOS11 的 iOS 设备上测试我们的网站,发现它出了问题,因为浏览器不接受来 self 们 API 的响应。使用远程调试器,我们能够确定我们遇到了 CORS 权限错误,并且响应正文和 HTTP header 被剥离。这似乎发生在所有移动 iOS 浏览器 (Chrome/Safari) 上,并且即使在我将 CORS 响应 header 更改为通配符值后仍继续发生。但是,所有其他浏览器/操作系统/iOS 版本都运行良好。我附上了来 self 们 API 的网络响应、我们 API 的响应 header 以及我们从控制台收到的错误。
是否有关于 iOS11 的某些东西可能导致此问题或失败,我是否有任何方法可以获得进一步的诊断?
最佳答案
我们遇到了类似的情况,表单托管在域 A 上并将数据发布到域 B 上的 API。 来自域 A 的 POST 请求包含与域 B 无关的 header “x-api-key”
对 API 的预检 OPTIONS 请求的响应包含 header
- 访问控制允许来源:https://domainA
- 访问控制允许 header :*
- 访问控制允许方法:*
这对除 iOS 以外的所有浏览器都有效。 正如我们最终发现的那样,为 Access-Control-Allow-Headers 指定通配符 * 不适用于 iOS 浏览器。在对 OPTIONS 请求的响应中,您需要指定 POST 请求中存在的所有 header ,即使某些 header 与域 B 上的服务器无关。 只有这样,iOS 才会发送 POST 请求。
将响应头更改为
- Access-Control-Allow-Headers:Accept,Content-Type,X-Requested-With,x-api-key
做到了(即使服务器 B 上没有处理 header x-api-key)
关于iOS11 在所有移动浏览器中导致 CORS 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46454208/