2016-02-03 27 views
3

我目前正在使用NGINX和Node。矛盾的CORS錯誤:沒有'Access-Control-Allow-Origin'提交或'Access-Control-Allow-Origin'頭包含多個值

在我NGINX配置我加入允許原產頭如下,其傳遞到包含我節點應用程序授權港口前:

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

在我的節點中間件我還設置頭接受任何來源:

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頭離開的時候,我得到以下瀏覽器的控制檯錯誤:

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

所以基本上錯誤聲稱1)標題設置過多,或者2)標題根本沒有設置。

回答

3

當我嘗試第三種可能性時,錯誤消失:只在Node中設置標題,而在NGINX中只設置標頭而不是

總之,這裏是我的發現:

  • 設置在NGINX 頁眉和節點沒有工作
  • 設置在NGINX 頭只沒有工作
  • 在節點中設置標題工作

這就是說,我仍然失去了爲什麼這是解決方案。爲什麼只在NGINX中設置標題完全沒有用處?也許是因爲NGINX處理proxy_pass的方式?

任何理論/解釋將不勝感激。