HTTP 常见状态码有哪些?分别代表什么?
简化版
状态码分五类,看首位数字就知道大方向:1xx 信息(少见)、2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务端错误。高频要记的:200 成功、301/302 永久/临时重定向、304 缓存未修改、400/401/403/404 客户端错、500/502/503/504 服务端错。
详细版
五大类:
| 类别 | 含义 | 常见码 |
|---|---|---|
| 1xx | 信息性(请求已收到,继续处理) | 100 Continue、101 Switching Protocols |
| 2xx | 成功 | 200 OK、201 Created、204 No Content |
| 3xx | 重定向 | 301、302、304、307、308 |
| 4xx | 客户端错误 | 400、401、403、404、405、429 |
| 5xx | 服务端错误 | 500、502、503、504 |
高频码含义:
- 200 OK:请求成功。
- 201 Created:创建成功(POST/PUT 新建资源后返回)。
- 204 No Content:成功但无返回体(如删除成功)。
- 301 Moved Permanently:永久重定向,浏览器/搜索引擎会更新地址。
- 302 Found:临时重定向,地址暂时换了,不更新收藏。
- 304 Not Modified:协商缓存命中,资源没变,用本地缓存。
- 400 Bad Request:请求格式/参数有误。
- 401 Unauthorized:未认证(没登录 / token 无效)。
- 403 Forbidden:已认证但无权限(登录了但不让访问)。
- 404 Not Found:资源不存在。
- 500 Internal Server Error:服务器内部错误(代码 bug)。
- 502 Bad Gateway:网关/代理从上游收到无效响应(后端挂了)。
- 503 Service Unavailable:服务暂时不可用(过载/维护)。
- 504 Gateway Timeout:网关等上游响应超时。
完整版教学
一、先记住五类的「大方向」
状态码不用死背,抓住首位数字的规律:
- 1xx:还在处理中(很少直接见到);
- 2xx:成功了;
- 3xx:你要的东西挪地方了 / 用缓存吧(重定向类);
- 4xx:你(客户端)的错——请求有问题;
- 5xx:服务器的错——请求没问题,是后端处理出了岔子。
4xx 和 5xx 的分界最重要:4xx 甩锅给客户端,5xx 甩锅给服务器。排查线上问题时,看到 4xx 先查请求本身(参数、权限),看到 5xx 先查服务端(日志、依赖)。
二、301 vs 302:永久还是临时
这是高频追问:
- 301 永久重定向:这个地址永久搬走了。浏览器会缓存这个跳转、搜索引擎会更新收录到新地址。适合域名更换、HTTP 跳 HTTPS。
- 302 临时重定向:只是暂时跳转,原地址以后还要用。搜索引擎不更新收录。适合未登录跳登录页、活动临时跳转。
用错影响很大:本该临时的用了 301,浏览器会长期缓存跳转,想改回来都难。(307/308 是语义更严格的版本,跳转时不允许把 POST 改成 GET。)
三、401 vs 403:没登录还是没权限
也是经典易混:
- 401 Unauthorized:未认证——你还没登录,或 token 过期/无效。潜台词是「你是谁?先证明身份」。
- 403 Forbidden:已认证但无权限——你登录了,但这个资源不让你这个身份访问。潜台词是「我知道你是谁,但你不够格」。
记法:401 = 没登录(Who are you),403 = 没权限(You can’t)。
四、502 vs 503 vs 504:服务端三兄弟
微服务/Nginx 架构下这三个很常见,要能区分:
- 502 Bad Gateway:网关(Nginx)把请求转给上游后端,后端返回了无效响应——通常是后端服务挂了/崩了。
- 503 Service Unavailable:服务暂时不可用——过载、限流、正在维护、线程池满。
- 504 Gateway Timeout:网关等上游后端响应,等超时了——后端太慢或卡死。
记法:502 后端挂了、503 服务过载/维护、504 后端超时。 排查方向各不相同。
五、304 与缓存的关系
304 不是「错误」,是缓存机制的一环。当浏览器带着 If-None-Match/If-Modified-Since 去问服务器「我这份缓存还能用吗」,服务器发现资源没变,就回 304 Not Modified(不带响应体),浏览器直接用本地缓存。这样省了传输大文件的带宽(详见「HTTP 强缓存和协商缓存」那道题)。
六、常见误区
- ❌ 把 401 和 403 记反——401 未认证(没登录),403 无权限(登录了但不让)。
- ❌ 把 301 当临时用——301 会被浏览器/搜索引擎长期缓存,临时跳转要用 302。
- ❌ 以为 3xx/304 是错误——3xx 是重定向,304 是缓存命中,都不是错误。
- ❌ 502/504 分不清——502 是后端返回无效响应(挂了),504 是等后端超时。
六、常见误区与追问
| 考点 | 正确口径 |
|---|---|
| 1xx | 信息提示 |
| 2xx | 成功 |
| 3xx | 重定向或缓存 |
| 4xx | 客户端错误 |
| 5xx | 服务端错误 |
200 OK
301 Moved Permanently
304 Not Modified
401 Unauthorized
403 Forbidden
502 Bad Gateway
504 Gateway Timeout
状态码先按大类判断方向,再记高频相邻码的细微差别。
- 误区:401 和 403 都是没权限,没区别。 401 更偏未认证或认证失败,403 是已理解请求但拒绝授权。
- 误区:301 和 302 对 SEO 没区别。 301 是永久重定向,302 是临时重定向,缓存和搜索引擎处理不同。
- 误区:304 是错误状态。 304 是协商缓存命中,表示资源未修改,客户端可用本地缓存。
- 追问:502、503、504 如何区分? 502 是网关收到上游无效响应,503 是服务暂不可用,504 是网关等待上游超时。
- 追问:201 和 204 常用于什么? 201 表示创建成功,204 表示成功但无响应体。
- 追问:接口永远返回 200 好不好? 不好,会让客户端、网关、监控和缓存无法正确理解错误类型。
七、加强记忆
状态码看首位:1xx 信息、2xx 成功、3xx 重定向、4xx 客户端错、5xx 服务端错(4xx 怪客户端、5xx 怪服务器)。高频记:200 成功、301 永久/302 临时重定向、304 缓存命中、401 没登录/403 没权限、404 找不到、500 后端 bug、502 后端挂/503 过载/504 超时。