javascript XmlHttpRequest 状态 0 而不是 IE 10 中的 401
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/16081267/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
XmlHttpRequest status 0 instead of 401 in IE 10
提问by Gregy
I have hit a wall with this issue. I guess it is some kind of IE bug but I want to be sure.
我遇到了这个问题。我想这是某种 IE 错误,但我想确定一下。
So the question is. Why does IE10 XmlHttpRequest.status returns 0 instead of 401?
所以问题是。为什么 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();
See plunker here: http://plnkr.co/edit/E2lCflPDHHaQi7t79IeM?p=preview
在此处查看 plunker:http://plnkr.co/edit/E2lCflPDHHaQi7t79IeM?p=preview
This code fires a CORS request which always returns 401. Firefox and chrome correctly return 401 in status attribute but IE10 returns 0. This issue breaks authentication handling methods I use for my project.
此代码触发始终返回 401 的 CORS 请求。Firefox 和 chrome 在状态属性中正确返回 401,但 IE10 返回 0。此问题破坏了我用于项目的身份验证处理方法。
Thank you
谢谢
Edit:
编辑:
I have modified the plunker with onload and onerror event handlers (tip from monsur's comment), but the result is still the same.
我已经使用 onload 和 onerror 事件处理程序修改了 plunker(来自 monsur 评论的提示),但结果仍然相同。
I have also made sure IE10 has no compatibility mode selected. (tip from cernunnos's comment)
我还确保 IE10 没有选择兼容模式。(来自 cernunnos 评论的提示)
回答by almostagile
This appears to be a bug in 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 is treating HTTP status 401 as a network error. The console shows:
IE10 将 HTTP 状态 401 视为网络错误。控制台显示:
SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied
According to the XMLHttpRequest Level 2 specification the status attribute should be zero if the error flag is set (for example because of a network error). However the specification also states (http://www.w3.org/TR/XMLHttpRequest2/#infrastructure-for-the-send-method) that a network error
根据 XMLHttpRequest Level 2 规范,如果设置了错误标志(例如因为网络错误),则状态属性应该为零。然而,规范还指出(http://www.w3.org/TR/XMLHttpRequest2/#infrastructure-for-the-send-method)网络错误
does not include HTTP responses that indicate some type of error, such as HTTP status code 410.
不包括指示某种类型错误的 HTTP 响应,例如 HTTP 状态代码 410。
I think it is clear that HTTP status 401 should not therefore be treated as a network error (as it is not in Chrome, Firefox and Safari) and that this is a bug in IE10.
我认为很明显 HTTP 状态 401 不应因此被视为网络错误(因为它不在 Chrome、Firefox 和 Safari 中)并且这是 IE10 中的错误。
回答by user4056247
I just ran into this problem today. After trying a few workarounds, and some Googleing, I ended up here. It turned out to just be a security level settings. Whatever security zone your website is in (Internet Options > Security) make sure you ENABLE the following setting in your zone: Miscellaneous > Access data sources across domains.
我今天刚遇到这个问题。在尝试了一些变通方法和一些谷歌之后,我最终来到了这里。原来只是一个安全级别的设置。无论您的网站处于哪个安全区域(Internet 选项 > 安全),请确保在您的区域中启用以下设置:杂项 > 跨域访问数据源。