2016-08-07 60 views
0

我遇到了一個問題,我的Angular JS應用程序的交叉源請求在Chrome中工作正常,但在Firefox中無法正常工作。在Firefox中阻止Cross Origin請求

在Firefox中收到的錯誤是:

跨來源請求阻止:同源策略不允許讀 遠程資源的https://api.domain.eu/join/joinstatus。 (原因: CORS頭'Access-Control-Allow-Origin'不匹配 'https://www.domain.eu, https://www.domain.eu')。

可以提出請求成功,直到我的Authorization頭添加到請求。

我的服務器(ASP.Net的Web API運行在IIS)具有如下標題設置:

Access-Control-Allow-Origin: https://www.domain.eu 
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE 
Access-Control-Allow-Headers: Authorization 
Access-Control-Allow-Credentials: true 

Firefox的成功預航班與OPTIONS請求的請求。通過查看我可以看到發送的Origin標題包含在返回的Access-Control-Allow-Origin標題中。

事實上,由於某種原因,返回的Access-Control-Allow-Origin標題有兩次我的域名(儘管在配置中指定了它一次),例如

Access-Control-Allow-Origin: https://www.domain.eu, https://www.domain.eu

這且不說正是在這方面,Firefox和Chrome之間的區別?

我還需要做些什麼才能在Firefox中使用?

UPDATE

我注意到,如果我把我的頭如下...

`訪問控制允許來源:https://www.domain.eu

...那麼預-flight OPTIONS請求正常工作。 Access-Control-Allow-Origin標頭與相同的請求和響應。但是,實際的GET請求會因上述錯誤而失敗。

如果我修改我的標題如下:

Access-Control-Allow-Origin: https://www.domain.eu, https://www.domain.eu

...(這是Firefox的錯誤暗示的),那麼實際的飛行前OPTIONS請求失敗,因爲這時候僅僅火狐希望標題中有一個值爲https://www.domain.eu

+0

請求中發送的實際「Origin」HTTP頭的值是什麼?這是不同於從Firefox發送的請求?您引用的錯誤消息似乎表明請求中的「Origin」標頭具有「https://www.domain.eu,https:// www.domain.eu」,這應該永遠不會發生。 「Origin」標題應該是單一來源。 – sideshowbarker

回答

0

嘗試:

Access-Control-Allow-Origin: https://www.domain.eu, https://domain.eu 

Access-Control-Allow-Origin: https://*.domain.eu, http://*.domain.eu 

Access-Control-Allow-Origin: domain.eu 

Access-Control-Allow-Origin: *.domain.eu 

編輯:

嘗試:

Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE 
Access-Control-Request-Method: GET, POST, OPTIONS, PUT, DELETE 

文檔:

訪問控制允許來源

甲返回的資源可以具有一個訪問控制允許來源頭,使用以下語法:

Access-Control-Allow-Origin: <origin> | * 

原點參數指定的URI可以訪問該資源。瀏覽器必須執行此操作。對於沒有憑據的請求,服務器可以指定*作爲通配符,從而允許任何來源訪問資源。

例如,允許http://mozilla.com訪問資源,您可以指定:

Access-Control-Allow-Origin: http://mozilla.com 

你只能指定一個URI或*

+0

對不起,這些都沒有工作。 – Remotec

0

此問題是由主要含有錯誤所致NuGet包在我的解決方案中的組合。 Owin和Web API CORS都被使用,導致頭文件混淆。

我解決了這個問題,回到基礎和解決我需要什麼軟件包和問題消失。

0

您需要在您的Web API項目中啓用CORS。 檢查this了!