矛盾的CORS错误:没有'Access-Control-Allow-Origin'存在或'Access-Control-Allow-Origin'标头包含多个值

时间:2016-02-03 22:12:12

标签: node.js http nginx header cross-domain

我目前正在使用NGINX和Node。

在我的NGINX配置中,我将如下所示添加allow-origin标头,然后将其传递到包含我的Node应用程序的授权端口:

location /auth {
    add_header Access-Control-Allow-Origin *;
    proxy_pass http://watchdog:3000;
}

在我的Node中间件中,我还设置标头以接受任何来源:

app.use((req, res, next) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    next();
}

当我这样做时,我的Chrome正确地抱怨我正在设置标题两次:

The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed.

在NGINX和Node中清楚地设置标题 是多余的。

然而,令人着迷(令人沮丧的是)当我在NGINX标题中删除Node中间件时,我收到以下Chrome控制台错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

所以基本上错误声称要么1)标题设置太多次,要么2)标题根本没有设置。

1 个答案:

答案 0 :(得分:3)

当我尝试第三种可能性时,错误消失了:只在Node中设置标题,在NGINX中设置

总结一下,这是我的发现:

  • 在NGINX 节点中设置标题不起作用
  • 仅在NGINX 中设置标题 不起作用
  • 仅在节点中设置标题

那就是说,我仍然迷失为什么这是解决方案。为什么只在NGINX中设置标题什么都不做?也许是因为NGINX处理proxy_pass的方式?

任何理论/解释都会受到高度赞赏。