2012-09-28 199 views
18

我目前在使用IE10進行跨域AJAX調用時遇到問題(在IE10模式下,不兼容)。Internet Explorer 10忽略XMLHttpRequest'xhr.withCredentials = true'

情況: 我有兩個域,http://ahttp://b。我有一個爲http://b設置的cookie。我目前在頁面http://a

我想做一個CORS請求http://b使用XMLHttpRequest的(這應該工作,根據http://blogs.msdn.com/b/ie/archive/2012/02/09/cors-for-xhr-in-ie10.aspx),並且包括在請求中的cookie。 的JS如下:

var xhr = new XMLHttpRequest(); 
xhr.open('GET', 'http://b', true); 
xhr.withCredentials = true; 
xhr.send(); 

這將確保該cookie被附接到所述請求;然而,Fiddler跟蹤顯示沒有附加cookie,我得到401: Access Denied

服務器被配置爲與CORS工作,它包括:存取控制標頭:

Access-Control-Allow-Origin: http://a 
Access-Control-Allow-Credentials: true 

(這不應當有什麼區別,因爲沒有OPTIONS預檢請求,所述第一請求IE發送是一個GET,並且該cookie不存在,從而導致401)。

此外,JS代碼段在Firefox和Opera中均可正常工作。

+0

注:我看到相同的行爲使用jQuery的時候,用'xhrFields:{ withCredentials:真 }' – Luuseens

+2

我沒有IE10 ,但我有一個CORS測試網站。你可以在IE10中試用下面的請求,看看它是否有效?只需點擊「發送請求」按鈕,看看反應是什麼。我剛剛嘗試過,它在Chrome中可以正常工作。如果它在IE中不起作用,它可能是一個錯誤:http://client.cors-api.appspot.com/client?server.enable=true&server.credentials=true&server.httpstatus=200&client.method=GET&client.credentials = true – monsur

+3

@monsur - 我做了一些更多的測試。 IE10在您提供的頁面中工作,似乎IE10在具有匹配的二級域名(例如'http:// abcom'與'http:// cbcom'交談)的頁面上支持'xhr.withCredentials' ,但當二級域名不匹配時(例如http://a.com與http://b.com對話) – Luuseens

回答

23

這可能是舊的IE P3P問題。使用IE的默認設置,如果在響應中沒有P3P頭部的情況下設置cookie,則該cookie將被標記爲「僅限第一方」。這意味着在第三方上下文中,如iframe或CORS請求,IE將拒絕發送cookie。

要修復它,您需要在設置cookie時提供P3P標頭。有關詳細信息,請參見http://msdn.microsoft.com/en-us/library/ms537343%28v=vs.85%29.aspx

更新:鏈接現在是死的,但你可以在the Internet Archive

+0

這是問題的正確答案 – Woody

+1

如果答案可以更新爲這個標題應該是爲了節省時間越過文檔,這將是很好的:) –

+0

正確的標題取決於您的網站的隱私政策。或者您可以像Google一樣執行操作(其標題目前爲「p3p:CP =」這不是P3P政策!請參閱http://www.google.com/support/accounts/bin/answer.py?hl=zh_CN&answer =「151657」以獲取更多信息。「」) – Anomie

-1

看到它,我也有類似的問題,事實證明,瀏覽器設置被阻斷第三方Cookie(IE10> Internet選項>隱私>高級>第三方Cookie>接受)。爲了解決這個問題,我選中了「覆蓋自動cookie處理」,「接受」(第三方Cookies)和「始終允許會話cookie」。

+0

我有第三方Cookies允許,但這並不能阻止問題,如果重複登錄。 –

-1

我們添加了標題有所不同:餅乾和它的工作..