HTTP 常见状态码总结(应用层)
HTTP 状态码是服务器给客户端的处理结果摘要:首位数字定类别,看到它就能大致判断请求是成功、要跳转、客户端的错还是服务端的错。难点不在记忆数字,而在几组语义相近的码之间划清边界——这正是面试和线上排查最常考的地方。
五类状态码的语义边界
- 1xx 信息性:请求已收到,继续处理。日常几乎遇不到,较有用的是
100 Continue——客户端先发个Expect: 100-continue试探,服务器同意后再传大请求体,避免白传。 - 2xx 成功:请求被正确处理。
200 OK是最常见的”成功并返回内容”;201 Created表示成功且创建了新资源(POST 建单);202 Accepted只表示”受理了但还没处理完”,适合异步任务;204 No Content表示成功但无响应体(如删除接口)。 - 3xx 重定向:资源在别处,客户端需要进一步动作。除 301/302 外,
304 Not Modified最常用——协商缓存命中,让客户端直接用本地副本。 - 4xx 客户端错误:问题出在请求方。改请求再试,而不是怪服务器。
- 5xx 服务端错误:请求本身合法,但服务端没能完成它。
关键的心智分界:4xx 重试前要先改请求,5xx 才值得原样重试。
易混组合辨析
301 vs 302
- 301 Moved Permanently:永久迁移。搜索引擎会把权重转移给新地址,浏览器还会缓存这个跳转,下次直接访问新址。换域名就用它。
- 302 Found:临时跳转。旧地址继续有效,下次仍可能访问原地址。活动页临时跳主会场是典型场景。
选错的代价是真实的:把临时跳转写成 301,浏览器缓存住后想撤都撤不回来。
401 vs 403 vs 405
- 401 Unauthorized:”你是谁?”——未认证或凭证无效。响应应带
WWW-Authenticate头提示如何认证。登录后再试可能成功。 - 403 Forbidden:”我知道你是谁,但你没权限。”服务器理解请求但拒绝执行。重新登录也没用,得换有权限的账号。
- 405 Method Not Allowed:资源存在,但 HTTP 方法不对,比如用 POST 打只读接口。响应必须带
Allow头说明支持哪些方法。
一句话记忆:401 管”认证”,403 管”授权”,405 管”方法”。
502 vs 503 vs 504
这组是网关/反向代理视角的码,排查方向完全不同:
- 502 Bad Gateway:网关收到了上游的响应,但响应是坏的——上游进程崩溃、连接被重置、返回了非法报文。锅在上游应用本身。
- 503 Service Unavailable:服务器当前处理不了,通常是过载、限流或停机维护,属于”暂时的”。可配
Retry-After提示稍后重试。 - 504 Gateway Timeout:网关把请求转给上游后,等响应超时了。上游还活着但太慢——慢查询、线程池打满、下游依赖卡顿都是常见原因。
排查路径:看到 502 去查上游进程是否健康、日志有没有崩溃栈;看到 504 去查上游的慢在哪;看到 503 去看容量和发布状态。别把 504 当成”服务挂了”,那通常是”服务没挂但来不及答”。
工程排查视角
- 先定位是哪个环节返回的码。网关、CDN、上游应用都可能产生 5xx。对比网关日志与上游日志的状态码:网关有 504 而上游没有记录,说明请求没等就被掐了;上游记了 200 而客户端收到 502,往往是响应在回传路上被改坏。
- 4xx 集中爆发先看客户端变更。上线后 400/404 突增,多半是调用方参数或 URL 拼了错的;401 突增查令牌签发与过期逻辑。
- API 设计别把所有错误包成 200。错误码全部 200 + body 里塞
code,会让监控、网关重试、缓存策略全部失效。错误体里再放稳定的业务码与 trace id 即可。 - 2xx 也要分清语义:异步接口用 202 比用 200 诚实;删除成功返回 204 比返回空 JSON 更规范。
面试追问
301 和 302 的区别? 301 永久迁移,浏览器和搜索引擎都会记住并转移权重;302 临时跳转,原地址保持有效。误用 301 会因缓存难以撤回。
401 和 403 的区别? 401 是未认证(缺凭证或凭证无效),认证后可能通过;403 是已认证但无权限,换凭证没用,要换权限。
502 和 504 的区别? 502 是网关收到了上游的无效响应(上游挂了或返回坏数据);504 是网关等上游响应超时(上游活着但太慢)。前者查上游健康,后者查上游性能。
小结
- 状态码首位定类别:1xx 过程、2xx 成功、3xx 引导、4xx 请求方的锅、5xx 服务端的锅。
- 三组易混码:301 永久/302 临时;401 认证/403 授权/405 方法;502 上游坏响应/503 暂时不可用/504 上游超时。
- 排查先看码是谁发的,再顺着网关与上游日志对齐时间线;API 设计要忠于语义,别拿 200 包一切。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dai Wei!
评论

