Safari 10.1:由于访问控制检查,无法加载带有查询参数的XMLHttpRequest

Mar*_*ius 26 javascript safari

在Safari 10.1上尝试CORS请求时,在包含查询参数的URL(例如https://example.com/api?v=1)上,Safari表示

由于访问控制检查,无法加载XMLHttpRequest

Chrome/Firefox工作正常.

对于没有"?v = 1"的页面请求,Safari也可以正常工作.

我尝试更改服务器响应标头

Access-Control-Allow-Origin:https://example.com

Access-Control-Allow-Origin:https://example.com/api?v = 1

但这打破了Chrome.

有什么建议?

Sei*_*a85 6

您遇到了 CORS 问题。

一些可能的原因:

  • 标头Access-Control-Allow-Origin只能在服务器端设置,不能在客户端脚本中设置。(你没有明确表示你这样做是正确的。)
  • 您确定协议(httpvs httpsvs 甚至可能file)完全相同吗?
  • 如果您可能有多个子域,您需要使用"^http(s)?://(.+\.)?test\.com$ .
    标记^行的开头,以防止此 url 前面出现任何内容。您需要一个协议并允许两者都在这里。子域是可选的。并且$标记行尾(您不需要设置子页面,因为 origin 仅基于主机)。
  • 正如这里所述,添加Access-Control-Allow-Headers: Origin到服务器配置也可能是一个解决方案。尝试将我的 Safari 发出的实际请求与 Firefox 或 Chrome 完成的成功请求进行比较,以发现可能丢失的标头(也可以将它们与您的服务器配置进行比较)。