CORS问题:标头包含多个值,但仅允许一个值

时间:2019-03-22 15:27:55

标签: javascript cors cross-domain axios

我已经尝试了一个整整一个小时的头痛解决方案,并且无法进一步前进,所以我希望有人能给我一些指导,并为我节省更多的头痛:

我的前端需要通过axios从后端API获取一些数据。 在我的后端,我有一个.htaccess,其内容如下:

<IfModule mod_headers.c>
        Header set X-Content-Type-Options "nosniff"
        Header set X-XSS-Protection "1; mode=block"
        # Always set these headers for CORS.
        Header always set Access-Control-Max-Age 1728000
        Header always set Access-Control-Allow-Origin: "*"
        Header always set Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
        Header always set Access-Control-Allow-Headers: "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,C$
        Header always set Access-Control-Allow-Credentials true
</IfModule>

因此,它应该允许来自任何地方的起源。到目前为止一切顺利。

现在,如果我让axios调用正在发送的标头:

enter image description here

看起来像这样。

现在响应头中有两个access-control-allow-origin,这似乎会造成一些麻烦。

我得到的错误:

  

从原点“ http://apidomain.test/api/previews/v1/preview/?id=726&_wpnonce=025ff5c5fa”到“ http://localhost:3000”的XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:“ Access-Control-Allow-来源”标头包含多个值“ *,http://localhost:3000”,但仅允许一个。

我该如何解决?

-我怎么可以允许多个值(以任何方式都会不好) –或者我该如何首先避免两个值造成这种混乱?

与发送的axios标头有关(我曾经有一个跟踪,我认为设置axios标头而不是添加一个会有所帮助,但是以某种方式它无济于事)。

(我没有做任何特别的事情,只是:axios.get('url',withCredentials:true,transformResponse:[某些变换...])。

请在这里帮助我。

先打个招呼,谢谢。

J

1 个答案:

答案 0 :(得分:1)

  

我该如何允许多个值(以任何方式都会不好)

您不能(浏览器不支持)。

  

或者我该如何首先防止两个值混淆?

删除设置标头的两位代码之一。

这是其中之一:

Header always set Access-Control-Allow-Origin: "*"

某处,您具有添加http://localhost:3000部分的代码。

删除其中之一。

  

与发送的axios标头有关

当然不是直接。我上面提到的另一段代码可能会根据请求标头动态运行。