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

问题描述 投票:13回答:4

我们正在使用iOS11在iOS设备上测试我们的网站,并注意到它正在崩溃,因为浏览器无法接受来自我们API的响应。使用远程调试器,我们能够确定我们遇到了CORS权限错误,并且响应正文和HTTP标头已被剥离。这似乎发生在所有移动iOS浏览器(Chrome / Safari)上,并且甚至在我将CORS响应标头更改为通配符值后,这种情况仍继续发生。但是,iOS的所有其他浏览器/ OS /版本都运行良好。我已附加了来自API的网络响应,API的响应标头以及我们从控制台获取的错误。

关于iOS11的某些问题可能会导致此问题,或者导致失败,有什么办法可以让我获得进一步的诊断?

enter image description hereenter image description hereenter image description here

ios safari cors ios11
4个回答
8
投票

我们在域A上托管表格并将数据发布到域B上的API时遇到了类似情况。来自域A的POST请求包含与域B不相关的标头“ x-api-key”

对API的预检OPTIONS请求的响应包含标头

  • 访问控制允许来源:https://domainA
  • 访问控制允许标题:*
  • 访问控制允许方法:*
  • 除iOS上的浏览器外,其他所有浏览器都运行良好。正如我们最终发现的那样,为Access-Control-Allow-Headers指定通配符*不适用于iOS浏览器。在对OPTIONS请求的响应中,您需要指定POST请求中存在的所有标头,即使某些标头与域B上的服务器无关。只有这样,iOS才会发送POST请求。

将响应头更改为

  • Access-Control-Allow-Headers:Accept,Content-Type,X-Requested-With,x-api-key
  • 没有(即使服务器B上未处理标头x-api-key)


1
投票

在我们的例子中,通过从我们的API发出OPTIONS预检请求,我们可以通过添加其他http标头信息来解决此问题。似乎Safari不喜欢CORS请求中的通配符条目,此外,还需要Access-Control-Allow-Header值中指定的每个标头,甚至是其他浏览器中不需要的“标准”标头。通过将以下标头添加到所有预检请求中,我们能够在站点和api之间重新获得X域请求。


0
投票

我遇到了同样的问题。


-1
投票

iOS 11引入了一些新的跟踪保护功能,该功能阻止了某些网站/ URL

© www.soinside.com 2019 - 2024. All rights reserved.