真实面经题目 · 原创解析

常见 HTTP 状态码有哪些?

HTTP 状态码是服务端对一次请求处理结果的标准化表达,面试中不能只背 200、404、500,而要按 1xx、2xx、3xx、4xx、5xx 五大类理解语义,再结合协议升级、缓存协商、重定向差异、REST 创建与删除语义、限流和网关故障来回答。真正高质量的答案应能说明状态码由谁返回、客户端应如何处理、是否影响缓存、是否改变请求方法,以及在排查线上问题时如何从状态码判断责任边界。

出现于:阿里巴巴 · 算法

60 秒回答模板

常见 HTTP 状态码可以按首位数字分成五类:1xx 表示请求已接收、还在继续处理,比如 101 Switching Protocols 常用于协议升级,例如从 HTTP 升级到 WebSocket;2xx 表示请求成功,200 是最常见的成功响应,201 表示资源创建成功,通常用于 POST 创建资源后返回,204 表示成功但没有响应体,常用于 DELETE 或无需返回内容的更新;3xx 表示重定向或缓存相关,301 是永久重定向,302 是临时重定向,303 明确让客户端用 GET 获取另一个资源,307 和 308 会保留原请求方法和请求体,304 表示协商缓存命中,资源未修改;4xx 表示客户端请求有问题,400 是参数或语法错误,401 是未认证,403 是已识别身份但无权限,404 是资源不存在,405 是方法不允许,409 表示资源状态冲突,429 表示请求过多触发限流;5xx 表示服务端或上游链路问题,500 是服务端内部错误,502 常见于网关收到上游异常响应,503 表示服务暂不可用,504 是网关等待上游超时。面试回答时要强调:状态码不仅是错误编号,还承载了 HTTP 语义,会影响客户端重试、浏览器缓存、搜索引擎收录、代理网关处理和 REST API 设计。

考点 分类总览
主线 1xx 信息性响应
易错点 把所有成功都回答成 200,忽略 201 创建资源和 …

深入解析

01

分类总览

HTTP 状态码按首位数字分为五类:1xx 信息性响应、2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务端错误。面试时先给分类框架,再展开典型状态码,答案会更有层次。

02

1xx 信息性响应

1xx 表示请求已被接收,但最终结果尚未完成。101 Switching Protocols 是重点,表示服务端同意切换协议,典型场景是 WebSocket 握手成功后从 HTTP 连接升级为双向通信协议。

03

2xx 成功响应

200 OK 表示请求成功并通常有响应体;201 Created 表示新资源创建成功,常配合资源地址返回;204 No Content 表示请求成功但没有响应体,适合删除、更新、心跳等不需要返回实体内容的场景。

04

3xx 重定向语义

301 表示永久重定向,客户端和搜索引擎都可能更新目标地址;302 表示临时重定向,原地址仍然有效;303 常用于 POST 后跳转到结果页并改用 GET;307 和 308 更强调保留原请求方法和请求体。

05

304 与缓存协商

304 Not Modified 不表示业务失败,而是协商缓存命中。客户端带 If-None-Match 或 If-Modified-Since 请求,服务端判断资源未变化后返回 304,客户端继续使用本地缓存,可以减少带宽和响应体传输。

06

4xx 客户端错误

400 表示请求格式、参数或语义不合法;401 表示需要登录或认证失败;403 表示认证通过但权限不足;404 表示目标资源不存在;405 表示资源存在但 HTTP 方法不被允许;409 表示状态冲突;429 表示请求频率过高。

07

5xx 服务端错误

500 是服务端内部异常的统称;502 多出现在反向代理或网关场景,表示上游返回了无效响应;503 表示服务暂不可用,可能是过载、维护或熔断;504 表示网关等待上游响应超时。排查时要结合网关、负载均衡和上游服务日志判断责任边界。

08

REST 设计语义

REST API 中状态码应和资源操作匹配:GET 成功通常是 200,POST 创建成功适合 201,DELETE 成功且无需返回内容可用 204,重复创建或版本冲突可用 409,方法不符合资源能力时应返回 405。

09

排查责任边界

4xx 通常优先检查客户端参数、认证、权限、路由和请求方法;5xx 通常优先检查服务端代码、依赖服务、网关、超时、负载和熔断。502、503、504 尤其要结合网关日志和上游服务日志定位。

10

客户端处理策略

不同状态码决定客户端行为:301/308 可长期记忆跳转,302/307 通常按临时跳转处理,401 触发登录或刷新令牌,429 需要退避重试,503 可结合 Retry-After,304 使用缓存,204 不应强行解析响应体。

易错点

  • 把所有成功都回答成 200,忽略 201 创建资源和 204 无响应体的语义。
  • 把 304 当成普通重定向或错误码,没有说明它属于协商缓存命中。
  • 混淆 401 和 403,分不清未认证与无权限。
  • 只说 301 永久、302 临时,但说不清 303、307、308 对请求方法的影响。
  • 把 4xx 和 5xx 都笼统称为报错,不能区分客户端责任和服务端责任。
  • 遇到 502、504 只怀疑业务代码,不考虑网关、反向代理、上游超时和服务不可达。
  • 在 DELETE 成功后强行返回冗余响应体,没有意识到 204 更能表达无内容成功。
  • 接口限流仍返回 500 或 200,导致客户端无法正确识别限流并进行退避重试。

面试官追问

301 和 302 对浏览器缓存、搜索引擎收录、接口调用有什么不同影响?

301 表示永久迁移,浏览器和搜索引擎更可能长期记忆新地址;302 表示临时跳转,原地址仍有效。接口调用中 301 要谨慎使用,避免客户端缓存错误目标。

为什么 307 和 308 比 302、301 更适合表达保留请求方法的重定向?

307 和 308 明确要求客户端保留原请求方法和请求体,适合 POST、PUT 等非 GET 请求的重定向。传统 301、302 在不同客户端中可能被改成 GET,语义不够稳定。

304 是如何配合 ETag、Last-Modified、If-None-Match、If-Modified-Since 工作的?

客户端带条件请求头,服务端用 ETag 或 Last-Modified 判断资源是否变化。未变化时返回 304 且不传输完整响应体,客户端继续使用本地缓存,从而减少带宽和响应耗时。

401 和 403 在登录态、Token 过期、权限不足场景中应该如何选择?

未登录、认证信息缺失或 Token 过期通常返回 401,引导重新认证;身份已确认但没有访问权限时返回 403,表示认证通过但授权不足。

REST API 中 POST 创建资源为什么更推荐返回 201,而不是一律返回 200?

201 能明确表达资源已创建,通常可以配合 Location 或响应体返回新资源地址和标识。它比 200 更准确地表达创建语义,有利于客户端按协议处理。

502、503、504 在 Nginx、网关、上游服务异常时分别可能代表什么问题?

502 常见于网关收到上游无效响应或连接失败;503 表示服务暂不可用,可能是过载、维护、熔断;504 表示网关等待上游响应超时,需要结合代理和上游日志定位。

接口限流时为什么要返回 429,客户端应该如何设计重试和退避策略?

429 明确表示请求过多,客户端可以识别为限流而不是服务端异常。重试应使用指数退避、抖动和 Retry-After,避免所有客户端同时重试造成二次冲击。