我遇到了用户登录 NTLM(通过 localhost:8585/test.ntlm)并且浏览器尝试通过 cometD 握手的问题。这适用于每个浏览器,除了 WinXP 上的 IE8(在 Win7 上与 IE8 一起使用)。
正如许多人所说的那样,当 IE8 认为它正在通过一个 NTLM 页面时,它不会发送响应正文,因为它预计会出现 401 错误。但是,当提示访问 /test.ntlm 页面时,授权已经发生。我使用 Fiddler 实际查看了 IE8 的请求标头,奇怪的是,当 fiddler 实际运行时,一切正常,服务器上看到的请求标头与 fiddler 未打开时的不同。
带提琴手的 IE8
[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
[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 发送响应正文,但这也不起作用。奇怪的是,它在 Win7 的 IE8 中完美运行,但在 WinXP 版本中却不行。请注意,Win7 的浏览器版本为 8.0.7601.17514,WinXP 的浏览器版本为 8.0.6001.18702。
欢迎任何和所有建议。