2015-12-04 45 views
11

突然間,似乎沒有更改我的web應用中的任何內容,我開始出現CORS錯誤當在Chrome中打開它。我試着添加一個Access-Control-Allow-Origin: *標題。然後,我得到這個錯誤:Access-Control-Allow-Origin:證書標誌爲true時不允許使用「*」,但沒有Access-Control-Allow-Credentials標頭

XMLHttpRequest cannot load http://localhost:9091/sockjs-node/info?t= 1449187563637. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'http://localhost:3010' is therefore not allowed access.

但你可以在下面的圖片中看到,有沒有Access-Control-Allow-Credentials頭。

enter image description here

跆拳道? Chrome bug?

我的頁面加載在http://localhost:3010,該服務器也使用Access-Control-Allow-Origin: *沒有問題。如果兩個端點都使用它,是否有問題?

回答

22

「憑證標誌」是指請求的XMLHttpRequest.withCredentials,而不是Access-Control-Allow-Credentials標頭。這是我混亂的根源。

如果請求的withCredentialstrueAccess-Control-Allow-Origin: *不能使用,即使沒有Access-Control-Allow-Credentials頭。

+1

是當使用參數withCredentials:true進行AJAX調用時,響應頭應具有Access-Control-Allow-Credentials = true。因此,此標頭不允許使用Access-Control-Allow-Origin = * 有關更多信息,請在withCredential參數和響應標頭中查看本文: http://www.ozkary.com /2015/12/api-oauth-token-access-control-allow-credentials.html – ozkary

+1

與此相同,認爲錯誤消息是指頭部。沒有意識到'withCredentials'標誌。奇怪的。 – BastiBen

+0

我提出了一個關於消息混亂的鉻錯誤,如果我沒有記錯的話,他們會認真對待它 – Andy

2

我通過使用以下步驟解決同樣的問題 ..

1)禁用您的瀏覽器擴展程序「允許控制允許原產地」

2)添加到這些服務

var xhr = new(); xhr.withCredentials = true;

+1

「該servlet」? (我對前端Web開發人員仍然陌生,所以我不知道這是什麼。)謝謝。 –

+0

wrong.not「the servlet」..這是你的服務 –

+1

謝謝,剛剛禁用擴展名「Allow-Control-Allow-Origin」後爲我工作 – Mawardy

0

withCredentials:true,與Access-Control-Allow-Origin: *配置的服務器,可以使用上,但你需要在服務器上一些額外的配置:

在服務器上使用Access-Control-Allow-Origin=*,也不會允許訪問的任何資源(需要憑據)在任何xhr CORS請求上。

解決方法:

  1. 使服務器入店沒有憑據 對遠程資源(和使用xhr.withCredentials = false
  2. 上 創建一個重寫規則的服務器,修改響應頭 Access-Control-Allow-Origin=*到請求的來源。例如,如果 請求正在使用某個端口,或者它來自列入白名單的 域,您也可以在某些條件下應用此重寫。

下面是一些article that explains how to do this on a IIS server,但你可以在許多其它服務器做到這一點:

PS:如果使用的憑據,你還需要在你的服務器的響應下面的頭:Access-Control-Allow-Credentials=true

PS2:只允許1個值爲「訪問控制允許來源」參數。如果您嘗試使用兩個域:domain1.com domain2.com,則無法使用。

相關問題