你有没有遇到过这种情况:调接口的时候浏览器报了个 418,你以为是服务器出了 Bug,查了半天才发现——等等,418 是「我是茶壶」(I’m a teapot)?谁在正经 API 里埋这种彩蛋?
HTTP 状态码是 Web 开发中最基础也最容易混淆的知识点之一。新手记不住,老手也偶尔翻车。本文把所有状态码按类别拆开揉碎讲清楚,并教你用 navbox 的 HTTP 状态码速查表 快速定位问题,建议收藏备用。
一、分类总览:5 个类别一眼记住
HTTP 状态码按百位数字分成 5 类:
| 分类 | 范围 | 含义 | 一句话口诀 |
|---|---|---|---|
| 1xx | 100-199 | 信息响应 | 服务器说「收到,继续」 |
| 2xx | 200-299 | 成功 | 一切正常 |
| 3xx | 300-399 | 重定向 | 去别处找 |
| 4xx | 400-499 | 客户端错误 | 你发的东西有问题 |
| 5xx | 500-599 | 服务器错误 | 服务器炸了 |
这个分类是 HTTP 协议规定的通用框架,记不住具体数字没关系,先记住类别。面试官问「4xx 和 5xx 的区别是什么?」——答案很简单:4xx 是你的锅,5xx 是服务器的锅。
二、2xx 成功类:开发最喜欢的数字
200 OK — 最幸福的状态码
请求成功,服务器返回了你想要的数据。这是每个 API 开发者最想在日志里看到的状态码。
201 Created — 创建成功
POST 请求成功创建了资源。RESTful API 里,创建用户、上传文件成功后应该返回 201,而不是 200。
204 No Content — 删除成功
DELETE 请求成功后常用 204——服务器处理成功了,但不需要返回任何内容。如果你看到一个 API 返回 204,大概率是删除操作。前端看到 204 时,不要尝试读取响应体,会报错。
206 Partial Content — 断点续传
视频播放、大文件下载的核心状态码。客户端通过 Range 头部请求文件的一部分,服务器返回 206 + 对应的字节片段。你刷抖音时进度条随便拖,背后就是 206 在默默工作。
常见踩坑: 有些后端新手把创建接口误返回 200 而不是 201,前端同事调了半天发现状态码不对,其实功能是正常的。RESTful 规范里 201 才是创建成功——照着规范来,团队协作少一个争议点。
三、3xx 重定向类:浏览器在偷偷带你绕路
301 Moved Permanently — 永久搬家
资源永久迁移到了新 URL。搜索引擎看到 301 会把旧链接的权重全部转移到新链接。网站换域名时必用,SEO 影响最小的重定向方式。
302 Found — 临时转移
资源暂时在别处,下次还来问老地址。登录后跳转、活动页面跳转、A/B 测试都常用 302。搜索引擎不会把权重转移给新地址,所以 SEO 场景下不要误用 302。
304 Not Modified — 浏览器里的隐形冠军
你的浏览器每天发出成千上万个 304。当你访问一个网站时,浏览器问服务器:「这个图片/CSS/JS 我缓存里有,没改过吧?」服务器回答「304——没改,用缓存」。这极大地节省了带宽,是 Web 性能优化的基础机制之一。
304 不是错误,它是 HTTP 缓存机制的正常工作方式。很多人看到浏览器控制台里有 304 以为出问题了——放心,这是对的。
307 / 308 — 严格重定向
和 301/302 类似,但保证请求方法不变。POST 请求重定向后还是 POST(301/302 可能会变成 GET)。支付回调、表单提交场景建议用 307/308。
四、4xx 客户端错误类:排查率最高的状态码
400 Bad Request — 「你发的啥玩意?」
服务器看不懂你的请求。常见原因:
- JSON 格式错误(多了一个逗号、少了一个引号)
- 参数类型不对(传了字符串,接口要数字)
- 请求头缺失
排查思路: 先用 navbox 的 JSON 格式化工具 检查请求体格式,确保 JSON 有效。大部分 400 都是 JSON 写错了这种低级错误。
401 Unauthorized — 你是谁?
未认证。你没有提供有效的身份凭证(Token、API Key、Cookie)。翻译成人话就是:你还没登录。
403 Forbidden — 你知道你是谁,但你不配
你已经登录了,但权限不够。普通用户试图访问管理后台 → 403。试想一下:401 像「请出示证件」,403 像「证件看过了,你不能进」。
404 Not Found — 互联网最著名的错误码
资源不存在。URL 写错了、文件删了、路径配错了,都会返回 404。
两个特别需要注意的场景:
- SPA 单页应用: 前端路由如果不用 Hash 模式(
#/about),刷新页面时服务器找不到对应的物理路径,会返回 404。需要在 Nginx 里配置try_files $uri /index.html; - API 版本号:
/v1/users升级到/v2/users后没有保留旧路由,老客户端直接 404——这是 API 兼容性设计的常见疏忽
405 Method Not Allowed — 方法不对
URL 对了,但 HTTP 方法错了。GET 请求发到了只支持 POST 的接口上。检查一下你的 fetch 或 axios 调用是不是写错了 method。
408 Request Timeout — 你太慢了
客户端发送请求太慢,服务器等不及断开了连接。上传大文件时网速太差,或者写了一个死循环不停发请求,都可能触发 408。
409 Conflict — 数据冲突
最常见的是重复创建。注册时用户名已存在、订单号重复提交——后端返回 409 告诉你数据有冲突,不是系统出 Bug 了。
413 Payload Too Large — 文件太大了
上传头像、上传视频时特别常见。Nginx 默认限制请求体大小为 1MB,上传大文件超过这个限制就返回 413。解决方案:要么配 Nginx 的 client_max_body_size,要么用分片上传。
429 Too Many Requests — 你被限流了
短时间内请求太频繁,服务器触发限流。开放 API(如 GitHub API、OpenAI API)最常遇到的错误码。看到 429 的应对方案:
- 检查响应头中的
Retry-After字段——服务器告诉你要等多少秒 - 实现指数退避(Exponential Backoff):第1次等1秒,第2次等2秒,第3次等4秒
- 不要再暴力重试——只会被封得更狠
💡 一句话总结 4xx 排查顺序: 先看 400(请求格式)→ 401/403(权限)→ 404(路径)→ 409(冲突)→ 429(限流)。按这个顺序排查能解决 90% 的问题。
五、5xx 服务器错误类:运维的噩梦
500 Internal Server Error — 程序员的至暗时刻
最通用的服务器内部错误。后端代码抛异常了、数据库连不上了、内存溢出了……通通返回 500。对前端来说 500 是最难调试的——你能做的就是确认请求无误后,把日志甩给后端同事。
502 Bad Gateway — 网关说「上游挂了」
Nginx 作为反向代理,把请求转发给后端应用(如 Node.js / Java / Python),但后端没有响应。常见原因:
- 后端服务进程挂了
- 端口写错了
- 防火墙拦住了内网通信
503 Service Unavailable — 服务暂时不可用
服务器太忙或正在维护。和 502 的区别:502 是网关连不上后端,503 是服务器自己说「我不行了」。
504 Gateway Timeout — 上游太慢了
Nginx 把请求转发给后端,后端在规定时间内(通常 60 秒)没有返回结果。常见于慢查询、第三方 API 超时、大文件处理。
502 vs 504 速记口诀: 502 是「上游连不上」,504 是「上游连上了但太慢,等不下去了」。
507 Insufficient Storage — 磁盘满了
服务器磁盘空间不足,无法存储请求数据。上传文件时最常遇到。登录服务器执行 df -h 检查磁盘使用率,清理日志文件通常能立刻解决。
六、那些你不知道的有趣状态码
418 I’m a Teapot — 「我是茶壶」
1998 年的愚人节 RFC 提案定义的。服务器用茶壶身份拒绝冲泡咖啡的请求。虽然是个玩笑,但很多框架和库把它当作 Easter Egg 保留了下来——你调 API 时看到 418,大概率是后端同事在跟你开玩笑。
451 Unavailable For Legal Reasons — 法律原因不可访问
真实存在的标准状态码(RFC 7725),以《华氏 451 度》命名。当内容因法律要求(版权投诉、政府审查)被屏蔽时,返回 451。比 404 更明确地告诉用户:「东西确实存在,但不给你看,是法律要求的。」
103 Early Hints — 预加载提示
2022 年新增的状态码。服务器在正式响应之前先告诉浏览器:「这个页面需要加载 style.css 和 logo.png,你先去下载,省得等」。配合 Link 头部使用,可以显著提升页面加载速度。
七、实战:用 navbox 速查表快速定位问题
工作中遇到不熟悉的状态码,不需要去 Google 查半天。打开 navbox 的 HTTP 状态码速查表,三个核心功能帮你在 10 秒内搞定:
功能一:按类目浏览 200-299 成功、300-399 重定向、400-499 客户端错误、500-599 服务器错误——一目了然。面试前把 4xx 和 5xx 全扫一遍,面试官怎么问都不慌。
功能二:精确搜索
直接搜状态码数字(如 429),秒出含义、原因和常见场景。线上出故障时,看一眼工具就能告诉运维:「这个 507 是磁盘满了,去清日志」。
功能三:冷门状态码全覆盖 普通速查表只收录 30 个常见的,这个工具连 422(Unprocessable Entity)、425(Too Early)、511(Network Authentication Required)这些不太常见但面试和特定场景会用到的状态码都收录了。
我自己的习惯:把速查表存到浏览器书签栏,看到不认识的 HTTP 状态码立刻点开查。几次下来,常用的几十个自然就记住了。
写在最后
HTTP 状态码是 Web 开发的基础设施,看似简单但每天都在用。记住几个关键原则:
- 2xx 是好事,3xx 是绕路,4xx 是你的问题,5xx 是服务器的问题
- 排查 4xx 用状态码速查表 + JSON 格式化工具,效率翻倍
- 遇到冷门状态码先查再猜,不要想当然
把 navbox 的 HTTP 状态码速查表 收藏起来,下次看到 451、507 或者恶搞的 418 时,你就知道该怎么应对了。要是觉得记住了,打开工具扫一遍 4xx 列表试试——我赌五毛钱你至少会漏记两三个。