ajax - HTTP 请求返回状态码 0 是什么意思?

标签 ajax http xmlhttprequest httpresponse fetch-api

当 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)在其他答案中,但可能是这些问题中的任何一个或都不是:

  1. 非法跨源请求(参见 CORS)
  2. 防火墙拦截或过滤
  3. 请求本身在代码中被取消
  4. 安装的浏览器扩展正在搞砸

对于浏览器来说,为更多这些 status==0 场景提供详细的错误报告是有帮助的。事实上,有时 status==0 会伴随有用的控制台消息,但在其他情况下则没有其他信息。

关于ajax - HTTP 请求返回状态码 0 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/872206/

相关文章:

http - Golang HTTP 和文件缓存

jquery - 强制ajax调用清除缓存

javascript - js中使用XMLHTTPREQUEST发送base64图像数据 "POST"

php - 如果我删除表中的所有用户,添加用户的选项也会消失。 #难住了

java - 如何调用ajax,以便刷新表并更新列

javascript - 在 Ajax 成功函数中将参数传递给 javascript 函数?

javascript - PHP 图像上传后更新 HTML 中图像标签的 SRC

javascript - 使用ajax动态调用PHP函数

javascript - Express.js 服务器错误处理 (404)。在我什至被允许处理错误之前,服务器吓坏了并抛出异常

http - 在 URL 的开头有 "https"而无需手动添加它