矛盾的 CORS 错误:要么不存在'Access-Control-Allow-Origin' 'Access-Control-Allow-Origin'要么标头包含多个值



我目前正在使用NGINX和Node。

在我的 NGINX 配置中,我按如下方式添加允许源标头,然后将其传递给包含我的 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标头时,我收到以下Chrome控制台错误:

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

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

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

总而言之,以下是我的发现:

  • 在NGINXNode中设置标头不起作用
  • 仅在 NGINX 中设置标头不起作用
  • 在节点中设置标头有效

也就是说,我仍然不知道为什么这是解决方案。为什么只在 NGINX 中设置标题完全没有作用?也许是因为NGINX处理proxy_pass的方式?

任何理论/解释将不胜感激。

相关内容

最新更新