导语访问网页、调用后端 API 接口的时候,浏览器、网络工具都会收到服务器返回的HTTP 状态码,一组三位数字,代表服务器对本次请求的处理结果MDN Web Do...。
看到200代表一切顺利;遇到404知道页面找不到;碰到500代表服务器炸了。很多新手调试接口、排查网页故障,看不懂状态码,就很难定位问题根源。 HTTP 状态码分为五大类别,第一位数字就确定大类:1xx 信息、2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务端错误。本文整理开发调试最常用的状态码,讲清含义、业务场景,同时给出简单排错思路,适合前端、后端、测试、运维人员查阅。
提示:本文为网络技术科普,参考 MDN、RFC 官方 HTTP 规范文档整理MDN Web Do...。
一、五大类状态码总览
表格 | 分类 | 区间 | 核心含义 | 简单说明 |
|---|
| 1xx 信息响应 | 100‑199 | 请求已收到,请客户端继续传输 | 较少见,多用于大文件上传、协议升级 | | 2xx 成功响应 | 200‑299 | 服务器成功完成本次请求 | 接口、网页访问正常返回数据 | | 3xx 重定向 | 300‑399 | 需要跳转,完成后续访问操作 | 网页迁移、缓存复用场景 | | 4xx 客户端错误 | 400‑499 | 客户端请求存在问题,服务器拒绝处理 | 参数错误、无权限、地址错误,问题出在请求方 | | 5xx 服务端错误 | 500‑599 | 服务器内部发生故障 | 代码异常、网关故障、服务过载,问题出在服务提供方 |
二、高频状态码详细解析2xx 请求成功类
- 200 OK
请求处理成功。GET 获取页面 / 接口数据、普通 POST 提交数据最常见。注意:200 只是 HTTP 层面通信成功,业务逻辑依然可以在返回 JSON 里面标记业务失败。
- 201 Created
资源创建成功。常用于 POST 新建用户、新建订单、上传文件,响应头
Location会带上新创建资源的访问地址。
- 204 No Content
请求成功,但是不返回任何响应体。常用于删除接口、部分更新接口,浏览器 / 客户端不需要渲染新页面,只需要知道操作完成即可MDN Web Do...。
3xx 重定向、缓存跳转类
- 301 Moved Permanently 永久重定向
资源永久迁移到新 URL,浏览器后续请求直接访问新地址;搜索引擎会更新收录地址。适合域名改版、旧地址永久废弃场景。
- 302 Found 临时重定向
临时跳转,旧地址未来可能恢复。登录跳转、活动页临时跳转大量使用,搜索引擎保留旧 URL 索引。
- 304 Not Modified 资源未修改
缓存命中。服务器对比客户端携带的缓存标识 ETag / 修改时间,判断资源没有更新,不需要重复下发内容,客户端直接使用本地浏览器缓存,节省带宽,提升网页加载速度。
4xx 客户端错误:问题出在请求这一边
- 400 Bad Request 请求错误
请求格式错误,JSON 格式非法、参数格式不对,服务器读不懂你的请求报文。排错重点:检查请求 body、参数、JSON 语法。
- 401 Unauthorized 未认证
没有登录,缺少身份凭证。需要带上 token、cookie 完成身份认证之后再访问接口。
- 403 Forbidden 禁止访问
身份认证成功,但是账号没有权限访问该资源。登录了,但没有操作权限,和 401 “没登录” 有本质区别。
- 404 Not Found 资源不存在
访问的 URL 地址不存在,地址拼写错误、资源已经被删除。网页最经典错误码。
- 405 Method Not Allowed 请求方法不允许
接口不支持当前 HTTP 方法。比如接口只接受 POST,你用 GET 去调用,就返回 405。排错:核对 GET/POST/PUT/DELETE 请求方式。
- 409 Conflict 资源冲突
资源状态发生冲突。例如重复创建同一个账号,数据库唯一键冲突。
- 413 Payload Too Large 请求体过大
上传文件、提交表单的数据体积超过服务器限制,调大服务器请求大小限制,或者拆分上传文件。
- 415 Unsupported Media Type 媒体类型不支持
Content‑Type请求头不对,例如接口需要 application/json,但是你传了 form 表单格式。
- 422 Unprocessable Entity 业务语义校验失败
HTTP 报文格式没问题,但是业务字段校验不通过。例如手机号格式错误、参数范围非法,属于业务层面校验报错。
- 429 Too Many Requests 请求过于频繁
触发服务器限流。短时间接口调用次数超限,需要降低请求频率,等待冷却时间再重试。
5xx 服务端错误:问题出在服务器 / 网关
- 500 Internal Server Error 服务器内部错误
服务器代码异常、数据库报错、程序 BUG。客户端请求格式没问题,是服务端程序出故障,普通用户只能反馈给后端开发排查问题。
- 502 Bad Gateway 网关错误
反向代理 / 网关拿到后端业务服务返回的无效、空响应。后端服务崩溃、进程挂掉经常返回 502。
- 503 Service Unavailable 服务不可用
服务暂时无法处理请求,常见于服务器过载、维护停机。属于临时状态,过段时间重试有可能恢复。
- 504 Gateway Timeout 网关超时
网关向后端服务发起请求,但是后端长时间没有返回结果。接口执行逻辑过慢、数据库查询卡死会出现 504。
三、调试排错快速小技巧
- 看到4xx 系列:优先自查我方请求,核对 URL、请求方法、请求头 token、参数格式、请求体 JSON、Content‑Type,问题基本出在客户端请求。
- 看到5xx 系列:请求本身格式没问题,故障属于服务端,反馈给服务提供方排查;503 可以等待重试;504 代表接口执行超时。
- 200 不等于业务成功!HTTP 状态码只代表网络通信成功,API 接口一定要解析返回 JSON 里面的业务 code,判断业务是否执行成功。
- 304 不代表出错,是正常缓存命中,可以减少网络流量消耗。
四、常见认知误区澄清
- 误区:404 一定是服务器把文件删了。
纠正:也有可能是 URL 拼写错误、路由配置错误,先核对访问地址。
- 误区:401 和 403 是一回事,都是没有权限。
纠正:401 = 你还没有登录;403 = 登录成功,但你没有访问这个资源的权限。
- 误区:返回 200 OK,就代表接口业务逻辑执行成功。
纠正:HTTP 状态只管传输层通信,业务失败完全可以包装在 200 的 JSON 响应体内。
- 误区:502、504 都是我的本地网络问题。
纠正:绝大多数场景是后端服务、网关故障;可以换网络验证,排除本地网络问题。
- 误区:301 和 302 效果完全一样,可以随便混用。
纠正:301 永久跳转,搜索引擎更新索引;302 临时跳转,二者缓存、SEO 行为不同,不能随意互换。
文末总结HTTP 状态码就是服务器返回的一套标准化 “反馈暗号”。第一位数字就可以快速定位故障大类:
2xx = 成功;3xx = 跳转缓存;4xx = 客户端请求有问题;5xx = 服务器侧故障。 开发调试网页、对接 API 接口的时候,优先看状态码,能够快速缩小问题范围,减少盲目排查。但要记住:200 仅代表 HTTP 通信成功,业务是否成功,还需要看接口返回的业务字段。 |