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 | 表示服务器目前超负荷或者正在进行停机维护 |