HTTP 状态码完全指南:1xx 到 5xx 怎么分类,200/301/404/500/502 各是什么意思
从五大类讲清 HTTP 状态码的分法,逐个拆解 200、301、404、500、502 在生产里真正的含义,告诉你按码查含义、调试 API、排查线上问题该先看哪几步。
HTTP 状态码完全指南:从 1xx 到 5xx 怎么看懂每一个码
接口报错的时候,浏览器和日志只甩给你一个三位数字。它是路标,不是判决书:看懂它,你就知道是谁的锅、下一步该查哪里。这篇按五大类把 HTTP 状态码理清楚,再挑生产里最常撞到的几个码,讲清含义和真实场景。
五大类:第一位数字定方向
HTTP 状态码是三位数,第一位决定它属于哪一类。这个分法写在 RFC 9110(HTTP 语义规范)里,一共五类:
- 1xx 信息类:请求收到了,还在处理。最典型的是 101 Switching Protocols,WebSocket 握手就走这个码。
- 2xx 成功类:请求成功。200 OK、201 Created、204 No Content 都在这。
- 3xx 重定向类:资源换地方了,客户端得再跳一次。301、302、307、308 都在这一档。
- 4xx 客户端错误:请求本身有问题,锅在发请求的一方。400、401、403、404、429 是常客。
- 5xx 服务端错误:服务端自己出了问题。500、502、503、504 在这。
记住一条心法:4 开头先查自己的请求,5 开头先查服务端。光这一条就能省掉一半的扯皮。
200:成功不等于没事
200 OK 表示请求成功。但别看到 200 就以为万事大吉。我见过最坑的一类 bug,是后端把业务失败也包在 200 里返回,body 里写 {"error": "余额不足"}。前端一看状态码是 200,直接按成功走,结果用户付了钱却扣了空。状态码和 body 语义不一致,是排查时最难发现的暗坑。所以 200 只说明 HTTP 这层通了,业务成没成,得看 body 自己讲清楚。
301 和 302:永久还是临时,差很多
3xx 这一档最容易用错。301 是永久搬家,302 是临时搬家。区别不只是语义:301 会被浏览器和 SEO 缓存得非常狠。
举个真实场景。你要把 400 个 URL 从旧域名迁到新域名,还想让 Google 把权重带过去。正确做法是 GET 页面用 301,让搜索引擎记牢这次搬家;接 POST 的 API 端点用 308,因为 308 会保留请求方法和 body,而 301 在某些客户端跟随时会把 POST 降级成 GET。
但上线别一上来就 301。先用 302 观察一周,确认新 URL 稳定了再切 301。因为错配的 301 会在浏览器里缓存好几个月,撤起来非常难受,你得等用户的缓存自然过期,没有强制刷新的好办法。
404 和 500:谁的锅一目了然
404 Not Found 是客户端错误,意思是这个地址服务端没有对应资源。常见原因有三类:URL 拼错、路由没配上、或者资源真的被删了。它在 4xx 这一档,所以第一反应应该是检查请求的路径对不对,而不是去怀疑服务挂了。
500 Internal Server Error 则是另一回事。它是个兜底码,意思是「服务端代码抛异常了,但我没法告诉你具体哪」。看到 500 别在前端瞎猜,直接去翻服务端日志,看堆栈。常见诱因是空指针、数据库连接没拿到、或者某个依赖服务返回了意料外的数据。500 不会自己消失,它一定对应着一行能在日志里找到的报错。
502 和 504:都像上游坏了,其实是两回事
这两个码最容易混。502 Bad Gateway 是说网关(比如 nginx)连上了上游,但拿回来的是无效响应:空响应、畸形头、或者连接中途被切。说白了,上游「坏了」,可能是崩了、没监听端口、或者回了垃圾。504 Gateway Timeout 则是网关连得上、但等响应等到超时放弃了,上游「慢了」,通常是慢查询、死锁、或某个依赖卡住。
排查动作完全不同。碰到 502,我习惯这样走:先 curl 直接打后端端口,如果连接被拒,说明后端根本没起;再 tail nginx 的 error.log,看有没有 connect() failed;最后确认新容器绑的是 0.0.0.0 不是 127.0.0.1。三分钟就能定位。
这里有个反复有人踩的坑:靠调大 proxy_read_timeout 去修 502。超时参数只对 504 有用,502 是上游坏了,调超时永远修不好它。想把 nginx 这层的超时和 upgrade 头配明白,可以对照一份 Nginx 速查表 一条条核。
按码查,比死记快
状态码有 70 多个,常用的就那十几个,剩下的没必要背。真正高效的做法是碰到一个查一个:输入码或关键词,直接看它的含义、生产里真正会触发的原因、和先查哪几步。比如输「websocket」,101 那条会带着 proxy_read_timeout 的修法一起出现;输「上传」,413 那条会带着 nginx client_max_body_size 的答案一起出现。这正是 HTTP 状态码查询 做的事:跨码、名称、含义、原因、场景、排查六个字段一起搜,按 1xx-5xx 一键筛,任意码一键复制,全程在浏览器里跑,不调任何 API。
下次再对着一个红色的三位数字发懵,先看第一位定方向,再查它的真实含义和排查清单。看懂状态码,排查线上问题就从猜变成了查。
Made by Toolora · Updated 2026-06-13