XmlHttpRequest 状态 0 而不是 IE 10 中的 401
Posted
技术标签:
【中文标题】XmlHttpRequest 状态 0 而不是 IE 10 中的 401【英文标题】:XmlHttpRequest status 0 instead of 401 in IE 10 【发布时间】:2013-04-11 11:14:30 【问题描述】:我遇到了这个问题。我想这是某种 IE 错误,但我想确定一下。
所以问题是。为什么 IE10 XmlHttpRequest.status 返回 0 而不是 401?
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
if (xmlhttp.readyState==4)
document.getElementById("rescode").innerhtml="Request completed with status: "+xmlhttp.status;
xmlhttp.open("GET","http://hosting.gregy.cz/cors/",true);
xmlhttp.send();
在此处查看 plunker:http://plnkr.co/edit/E2lCflPDHHaQi7t79IeM?p=preview
此代码触发 CORS 请求,该请求始终返回 401。Firefox 和 chrome 在状态属性中正确返回 401,但 IE10 返回 0。此问题破坏了我用于项目的身份验证处理方法。
谢谢
编辑:
我已经用 onload 和 onerror 事件处理程序修改了 plunker(来自 monsur 评论的提示),但结果仍然相同。
我还确定 IE10 没有选择兼容模式。 (来自 cernunnos 评论的提示)
【问题讨论】:
@rekire:CORS 是一种规避 SOP 的方法。这不是重复的。 IE10 应该支持 CORS,并且您的服务器响应似乎有必要的标头,您确定您的 IE10 没有在兼容模式下运行吗?也许是 IE9/8/7 浏览器模式/文档模式? 尝试附加到较新的onload
和 onerror
方法,看看你在每个方法中得到了什么。
【参考方案1】:
这似乎是 IE10 (https://connect.microsoft.com/IE/feedback/details/785990/ie-10-on-win8-does-not-assign-the-correct-status-to-xmlhttprequest-when-the-result-is-401) 中的一个错误。
IE10 将 HTTP 状态 401 视为网络错误。控制台显示:
SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied
根据 XMLHttpRequest Level 2 规范,如果设置了错误标志(例如由于网络错误),状态属性应该为零。但是,规范还指出 (http://www.w3.org/TR/XMLHttpRequest2/#infrastructure-for-the-send-method) 网络错误
不包括指示某种类型错误的 HTTP 响应,例如 作为 HTTP 状态码 410。
我认为很明显,HTTP 状态 401 不应因此被视为网络错误(因为它不在 Chrome、Firefox 和 Safari 中)并且这是 IE10 中的错误。
【讨论】:
有什么方法可以检测他们产生的这个错误吗? 此外,我也遇到了同样的问题,但得到了一个带有“未定义”的“404”——这让我发疯了! IE11中好像有这个bug。 有解决办法吗?【参考方案2】:我今天刚遇到这个问题。在尝试了一些解决方法和一些谷歌搜索之后,我最终来到了这里。 原来只是一个安全级别设置。 无论您的网站位于哪个安全区域(Internet 选项 > 安全),请确保在您的区域中启用以下设置:杂项 > 跨域访问数据源。
【讨论】:
谢谢,这有帮助。这也是 Microsoft 错误报告的已接受答案链接中提到的解决方法。 但我无法在我的情况下设置此设置。如何在代码中处理?以上是关于XmlHttpRequest 状态 0 而不是 IE 10 中的 401的主要内容,如果未能解决你的问题,请参考以下文章
如何让 Axios 使用 Fetch 而不是 XMLHttpRequest
为啥在使用 XMLHttpRequest() 而不是表单时必须处理 Access-Control-Allow-Origin?
java可不可以创建xmlhttprequest对象 而不是用javascript