当 JavaScript 网络调用(例如 fetch 或 XMLHttpRequest)或任何其他类型的 HTTP 网络请求失败且 HTTP 状态代码为 0 时,这意味着什么?
这似乎不是有效的 HTTP 状态代码,因为其他代码在 HTTP 规范中是三位数字。
作为测试,我尝试完全拔掉网络。它可能无关紧要,但这会导致状态代码 17003 (IIRC),粗略搜索表明这意味着“DNS 服务器查找失败”。
相同的代码在某些位置和系统上运行良好,但在某些环境中它会失败,状态代码为 0,并且没有提供 responseText。
这是对 Internet URL 的典型 HTTP POST。它不涉及 file://,据我所知,它可能会返回 0,表示在 Firefox 中成功。
最佳答案
这里的许多答案都是错误的。似乎人们找出了在他们的特定情况下导致 status==0 的原因,然后将其概括为答案。
实际上,失败的 XmlHttpRequest 的 status==0 应被视为未定义错误。
实际的 W3C 规范定义了此处返回零的条件: https://fetch.spec.whatwg.org/#concept-network-error
正如您从规范(fetch 或 XmlHttpRequest)中看到的那样,此代码可能是在联系服务器之前发生的错误的结果。
产生此状态代码的一些常见情况反射(reflect)在其他答案中,但可能是这些问题中的任何一个或都不是:
- 非法跨源请求(参见 CORS)
- 防火墙拦截或过滤
- 请求本身在代码中被取消
- 安装的浏览器扩展正在搞砸
对于浏览器来说,为更多这些 status==0 场景提供详细的错误报告是有帮助的。事实上,有时 status==0 会伴随有用的控制台消息,但在其他情况下则没有其他信息。
关于ajax - HTTP 请求返回状态码 0 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/872206/