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