HTTP状态码这东西,平时不显山不露水,可一旦线上出问题,大家第一眼盯的基本都是它。开发联调时接口突然报错,你问后端“返回啥了”,对方甩过来一个数字;运维查工单时,翻到网关访问日志,满屏都是三位数;前端接后端接口,只要状态码不是 2xx,页面就直接白屏。这时候,一个能快速对照的 HTTP 状态码清单,比什么都管用。
这份清单不是让你背的,是拿来查的。我把平时开发、排查、联调、运维这些场景里遇到的状态码,按分类整理成文,把每个状态码的含义、典型场景、常见原因、排查方向一次性讲清楚。适合后端开发、前端开发、测试、运维,以及刚学 HTTP 协议但不知道它到底有什么用的人。你不需要把几十个状态码全部记下来,只需要知道大类是什么、遇到具体码时知道去哪个方向查,效率就能提升一大截。
1. HTTP 状态码基础认知
1.1 状态码长什么样、藏在哪
打开浏览器的开发者工具,随便访问一个网页,在网络面板里点开任意一条请求,能看到响应头、响应体,最上面那一行就是状态行。例如访问一个不存在的页面会看到:
code复制HTTP/1.1 404 Not Found
这一行包含三部分:HTTP 版本、状态码、原因短语。状态码就是中间那个三位数字,机器根据它决定下一步处理;原因短语只是给人看的简短描述,没有任何强约束力。服务端返回 404 时,哪怕原因短语写成 "Oops",客户端依然会认为请求找不着资源。
所以,真正决定语义的是状态码本身。三位数字的第一位是类别标记,第二位和第三位是细分编号。比如 2xx 这一大类里,200 表示完全成功,201 表示创建成功,204 表示成功但没内容。数字范围是固定的,不能自定义 299、399 这种没有官方含义的码,这会破坏客户端对类别的判断。如果你在自研协议里用了非标准码,客户端拿到的响应状态根本无法归类,后续解析基本就是灾难。
1.2 五大分类到底在说什么
HTTP 状态码一共五大类,规则非常简单:第一位是几,就代表什么性质的结果。我平时习惯记成“服务器在跟你对话”:1xx 是“我知道了,还在处理”,2xx 是“成了”,3xx 是“你走错门了,我告诉你新地址”,4xx 是“是你发给我的东西有问题”,5xx 是“我自己出问题了”。
| 分类 | 范围 | 含义 | 常见情况 |
|---|---|---|---|
| 信息性响应 | 100-199 | 请求已接收,服务器继续处理 | 很少直接出现在业务代码里 |
| 成功 | 200-299 | 请求已成功处理 | 日常接口最常见的 200、201、204 |
| 重定向 | 300-399 | 需要进一步操作才能完成请求 | 301、302、304 最常见 |
| 客户端错误 | 400-499 | 请求本身有问题 | 参数错误、没权限、资源不存在 |
| 服务端错误 | 500-599 | 服务器处理时出错 | 后端代码崩了、网关超时 |
这个大分类一定要刻在脑子里,因为很多冷门状态码虽然没怎么见过,但只要你知道它是 4xx,第一反应就应该是“去查请求参数、Header、权限”,而不是去重启服务器。反过来,看到 5xx,才需要去查后端服务和中间件。这一条判断在线上排障时特别省事。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 高频状态码逐个拆解
2.1 开发中最常打交道的 12 个状态码
我不打算把所有状态码都扔给你,先把日常出现频率最高的十几个讲透。
- 200 OK:请求成功,响应体里就是你要的数据。GET 查询、POST 提交成功后一般就返回它。
- 201 Created:新建资源成功。POST 创建一条数据、PUT 上传一个文件成功后,规范做法是返回 201,同时带上新资源的 Location 头。
- 204 No Content:处理成功,但没有内容返回。比如删除一个资源成功后,返回 204 比返回 200 更准确,前端不需要解析响应体。
- 301 Moved Permanently:永久重定向。域名换了、旧链接要永久指向新地址时用这个。浏览器和搜索引擎都会记住新地址。
- 302 Found:临时重定向。比如用户未登录时跳转到登录页,登录完还能回到原页面,这时候用 302。
- 400 Bad Request:请求本身不对。要么是参数缺失、格式错误,要么是请求体不是服务端想要的,反正问题出在客户端。
- 401 Unauthorized:没有认证,或者认证信息无效。通常意味着“需要登录”或“登录已过期”。
- 403 Forbidden:服务器知道你是谁,但你没有权限访问。注意它和 401 的差别。
- 404 Not Found:
