iOS11 在所有移动浏览器中导致 CORS 问题

标签 ios safari cors ios11

我们在装有 iOS11 的 iOS 设备上测试我们的网站,发现它出了问题,因为浏览器不接受来 self 们 API 的响应。使用远程调试器,我们能够确定我们遇到了 CORS 权限错误,并且响应正文和 HTTP header 被剥离。这似乎发生在所有移动 iOS 浏览器 (Chrome/Safari) 上,并且即使在我将 CORS 响应 header 更改为通配符值后仍继续发生。但是,所有其他浏览器/操作系统/iOS 版本都运行良好。我附上了来 self 们 API 的网络响应、我们 API 的响应 header 以及我们从控制台收到的错误。

是否有关于 iOS11 的某些东西可能导致此问题或失败,我是否有任何方法可以获得进一步的诊断?

enter image description here enter image description here enter image description here

最佳答案

我们遇到了类似的情况,表单托管在域 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/

相关文章:

ios - AVAudioSession模式切换音量差异

ios - 将自定义 UITableViewCell 滚动到键盘上方?

javascript - 尝试在 iOS Safari 8 中存储 blob 会抛出 DataCloneError

ipad - iPad Safari (iOS 5.0.1) 上的 iframe CSS3 缩放问题

javascript - 可扩展应用程序的 CORS 问题

ios - 创建自定义 SCNGeometry 多边形

ios - 如何在点击另一行时取消选择一行?

html - Safari中div宽度的差异

reactjs - 无法使用 nginx 在 ReactJS 应用程序中使用 CORS

javascript - 哪个服务器需要返回 Access-Control-Allow-Origin header ?