2013-10-30 72 views
1

我遇到了用戶登錄到NTLM(通過localhost:8585/test.ntlm)並且瀏覽器試圖通過cometD進行握手的問題。這適用於除IE8 ON WinXP(與Win7上的IE8一起使用)之外的每個瀏覽器。IE8 NTLM Ajax否「Content-Length:0」Post cometD Fiddler

當IE8認爲它正在通過NTLM頁面時,似乎發生了許多人說的事情,它不會發送響應主體,因爲它預計會發生401錯誤。但是,授權從登錄時發生,當提示訪問/test.ntlm頁面時。我已經使用Fiddler來實際查看IE8的請求標頭,奇怪的部分是當fiddler實際上處於完全正常狀態時,在服務器上看到的請求標頭與它們在fiddler不在時不同。

IE8使用Fiddler

[Accept][text/javascript, text/html, application/xml, text/xml, */*] 
[Accept-Language][en-us] 
[x-prototype-version][1.6.0.2] 
[Referer][http://nldo-82-2.eur.ad.sag:8585/test.ntlm] 
[x-requested-with][XMLHttpRequest] 
[Content-Type][application/json; charset=UTF-8] 
[Accept-Encoding][gzip, deflate] 
[User-Agent][Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)] 
[Host][nldo-82-2.eur.ad.sag:8585] 
[Content-Length][0] 
[Connection][Keep-Alive] 
[Cache-Control][no-cache] -- Only added in IE 
[Cookie][JSESSIONID=1ckx2gei602sg] 
[Authorization][NTLM TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFAs4OAAAADw==] --Only happens in IE8 when Fiddler isn't on 

IE8使用Fiddler

[Accept][text/javascript, text/html, application/xml, text/xml, */*] 
[Accept-Language][en-us] 
[x-prototype-version][1.6.0.2] 
[Referer][http://nldo-82-2.eur.ad.sag:8585/test.ntlm] 
[x-requested-with][XMLHttpRequest] 
[Content-Type][application/json; charset=UTF-8] 
[Accept-Encoding][gzip, deflate] 
[User-Agent][Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)] 
[Host][nldo-82-2.eur.ad.sag:8585] 
[Content-Length][177] 
[Connection][Keep-Alive] 
[Pragma][no-cache] 
[Cookie][JSESSIONID=1qpdgov0w07pf] 

正如我們可以看到的最大區別在於,IE8 W/O型的Fiddler具有由瀏覽器作爲添加的授權首標盡我所知。

我不知道該做什麼,我嘗試了很多在其他stackoverflow主題中列出的MS修補程序,但沒有一個似乎能夠正常工作。儘管瀏覽器仍然期待401發送響應主體,但我也試圖返回一個401,儘管如此,這也沒有奏效。奇怪的是,它在IE8 for Win7中完美工作,但不是WinXP版本。請注意,Win7的瀏覽器版本爲8.0.7601.17514,WinXP的瀏覽器版本爲8.0.6001.18702。

任何和所有的建議將受到歡迎。

回答

0

嘗試更改GET方法,看看它是怎麼回事?

我剛剛花了2天的時間來看看ajax POST請求超時的問題。所有搜索都發現它是SSO NTLM身份驗證問題。

Internet Explorer會檢查每個發佈請求的NTLM身份驗證。

提琴手緩存NTLM身份驗證,並允許請求通過withoput問題。

+0

更改爲GET方法的問題是cometd Longpulling僅支持POST方法。 我曾經認爲Fiddler緩存了NTLM認證,這就是爲什麼它能正常工作,但我認爲這是一個選項,你必須在運行Fiddler時專門選擇。 – Craig