HTTP常见状态码梳理

221 阅读3分钟

HTTP 状态码表示客户端请求的返回结果,标识服务端处理是否正常等状态。

大类划分

HTTP 状态码共有 5 大类,只要是按照这五大类来定义状态码,就是 OK 的,既可以使用业内规范规定的状态码,也可以根据业务自己进行定义,这五大类如下:

状态码 类别 含义
1xx Informational(信息性状态码) 请求正在处理
2xx Success(成功状态码) 请求正常处理完毕
3xx Redirection(重定向状态码) 需要进行附加操作以完成请求
4xx Client Error(客户端错误状态码) 服务器无法处理请求
5xx Server Error(服务器错误状态码) 服务器处理请求出现错误

常见状态码

有协议规定的大概有 60 多种状态码,但其中大多数日常开发中很少用到,常用的状态码一共有 14 种,下面梳理一下:

2xx 状态码
状态码 含义
200 表示请求被成功处理了
204 请求已被成功处理,但没有返回任何实体的主体内容
206 请求已被成功处理,且返回了部分主体内容
3xx 状态码
状态码 含义
301 永久重定向,表示请求的地址被永久替换成新地址了,该换书签了
302 临时重定向,临时替换成当前新地址,之后还可能变化
303 类似 302 的重定向效果,表示请求地址有另外一个地址,并明确表示客户端应该通过 GET 方式去访问,比如当通过 POST 请求服务端时,服务端希望客户端以 GET 访问另一个 URI 时,使用 303 会更加合适
304 表示服务端允许访问资源,但未满足访问条件,无重定向含义
307 类似 302 的重定向,307 会遵循标准不将 POST 改为 GET,但实际每种浏览器可能出现不同情况

PS:目前在实际场景下,返回 301、302、303 状态码时,几乎所有浏览器都会将 POST 改为 GET,并删除请求报文的主体内容,301、302 的标准其实是禁止将 POST 改成 GET 的,但实际大家都是这么做的。

4xx 状态码
状态码 含义
400 表示客户端发送的请求报文存在错误,需要客户端修改后重新发送
401 表示客户端请求需要认证,第一次返回会弹出认证弹窗,第二次返回表示认证失败
403 表示客户端请求被服务端拒绝了,服务端没必要给出详细理由,但如果想作说明可以在主体部分进行描述,客户端就可以看到了
404 表示在服务器上没有找到要请求的资源,或者当服务端不想说明拒绝理由时使用
5xx 状态码
状态码 含义
500 表示服务器在执行请求时发生了错误
503 表示服务器目前超负荷或者正在进行停机维护