我目前正在使用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)标题根本没有设置。
答案 0 :(得分:3)
当我尝试第三种可能性时,错误消失了:只在Node中设置标题,在NGINX中设置不。
总结一下,这是我的发现:
那就是说,我仍然迷失为什么这是解决方案。为什么只在NGINX中设置标题什么都不做?也许是因为NGINX处理proxy_pass
的方式?
任何理论/解释都会受到高度赞赏。