Http status:0 也是一种日常ajax请求常见的错误,一般常见的200、500、404等都比较好理解,但是0这个在标准的http返回码中是不存在的

它其实是"XMLHttpRequest"的readyState的取值,只有readyState大于等于3时,才能拿到真正的http status,否则取http status应该抛出异常的,但是有些框架比如jquery对ajax请求进行了封装,会直接给status赋值。

状态名称描述
0Uninitialized初始化状态。XMLHttpRequest 对象已创建或已被 abort() 方法重置。
1Openopen() 方法已调用,但是 send() 方法未调用。请求还没有被发送。
2SentSend() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应。
3Receiving所有响应头部都已经接收到。响应体开始接收但未完成。
4LoadedHTTP 响应已经完全接收。

当我们得到Http status:0时,可能会是以下几种情况:

1. url路径或协议头错误

2. 网络断开

3. 防火墙拦截了请求

4. 跨域请求

5. 服务端响应前取消请求

通常需要注意的是2、3、4。出现这种情况时,应该重复请求,用浏览器直接访问请求以确认网络是否畅通,请求是否被防火墙拦截。

还可以借助大部分浏览器自带的开发人员工具 网络(Network)标签页、控制台(Console)标签页查看请求错误,如果是跨域请求会在控制台提示错误。如果是网络或防火墙问题会看到请求根本没发送、或服务器没返回。

    另外还有403等错误也可能是防火墙或程序安全机制拦截。405则是请求的方法例如(POST、GET)等不被服务器支持。400则是参数解析错误,一般是程序处理时解析参数错误、也有可能是请求中包含部分不被允许的特殊字符,具体错误信息要结合服务器日志分析。

1条评论
发表评论