如何正确实现CORS(Access-Control-Allow-Origin)?

时间:2014-11-18 14:16:10

标签: javascript ajax xmlhttprequest cors access-control

我想通过XML HTTP请求(XHR,AJAX)访问第三方资源(在另一个域上)。

我按如下方式设置CORS(两侧 - 目标和原点):

Access-Control-Allow-Origin: http://www.example.com, https://www.example.com, http://www.example.org, https://www.example.org
Access-Control-Allow-Methods: GET, POST, HEAD, OPTIONS

Chrome,Firefox和Internet Explorer在https://www.example.org/foo上调用XHR时将其拒绝为http://www.example.com/bar

最详细的错误消息来自Firefox:

  

XMLHttpRequest无法加载https://www.example.org/foo。 ' Access-Control-Allow-Origin'标头包含多个值&{39; http://www.example.comhttps://www.example.comhttp://www.example.orghttps://www.example.org',但只允许一个。起源' http://www.example.com'因此不允许访问。

这个错误让我非常困惑。它就像"嘿,你是A,想和B交谈,但B只接受A,B。所以你不能和B"交谈。 WTF?

如何正确实施CORS(Access-Control-Allow-Origin)?

1 个答案:

答案 0 :(得分:2)

Access-Control-Allow-Origin只接受*来源。

如果您想支持多个来源而不是所有来源,那么您必须:

  1. 查看the Origin request header
  2. 检查它是否在您的可接受来源列表中
  3. 将其放入Access-Control-Allow-Origin响应标题