真实面经题目 · 原创解析
常见 HTTP 状态码有哪些?
HTTP 状态码是服务端对一次请求处理结果的标准化表达,面试中不能只背 200、404、500,而要按 1xx、2xx、3xx、4xx、5xx 五大类理解语义,再结合协议升级、缓存协商、重定向差异、REST 创建与删除语义、限流和网关故障来回答。真正高质量的答案应能说明状态码由谁返回、客户端应如何处理、是否影响缓存、是否改变请求方法,以及在排查线上问题时如何从状态码判断责任边界。
真实面经题目 · 原创解析
HTTP 状态码是服务端对一次请求处理结果的标准化表达,面试中不能只背 200、404、500,而要按 1xx、2xx、3xx、4xx、5xx 五大类理解语义,再结合协议升级、缓存协商、重定向差异、REST 创建与删除语义、限流和网关故障来回答。真正高质量的答案应能说明状态码由谁返回、客户端应如何处理、是否影响缓存、是否改变请求方法,以及在排查线上问题时如何从状态码判断责任边界。
常见 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 设计。
HTTP 状态码按首位数字分为五类:1xx 信息性响应、2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务端错误。面试时先给分类框架,再展开典型状态码,答案会更有层次。
1xx 表示请求已被接收,但最终结果尚未完成。101 Switching Protocols 是重点,表示服务端同意切换协议,典型场景是 WebSocket 握手成功后从 HTTP 连接升级为双向通信协议。
200 OK 表示请求成功并通常有响应体;201 Created 表示新资源创建成功,常配合资源地址返回;204 No Content 表示请求成功但没有响应体,适合删除、更新、心跳等不需要返回实体内容的场景。
301 表示永久重定向,客户端和搜索引擎都可能更新目标地址;302 表示临时重定向,原地址仍然有效;303 常用于 POST 后跳转到结果页并改用 GET;307 和 308 更强调保留原请求方法和请求体。
304 Not Modified 不表示业务失败,而是协商缓存命中。客户端带 If-None-Match 或 If-Modified-Since 请求,服务端判断资源未变化后返回 304,客户端继续使用本地缓存,可以减少带宽和响应体传输。
400 表示请求格式、参数或语义不合法;401 表示需要登录或认证失败;403 表示认证通过但权限不足;404 表示目标资源不存在;405 表示资源存在但 HTTP 方法不被允许;409 表示状态冲突;429 表示请求频率过高。
500 是服务端内部异常的统称;502 多出现在反向代理或网关场景,表示上游返回了无效响应;503 表示服务暂不可用,可能是过载、维护或熔断;504 表示网关等待上游响应超时。排查时要结合网关、负载均衡和上游服务日志判断责任边界。
REST API 中状态码应和资源操作匹配:GET 成功通常是 200,POST 创建成功适合 201,DELETE 成功且无需返回内容可用 204,重复创建或版本冲突可用 409,方法不符合资源能力时应返回 405。
4xx 通常优先检查客户端参数、认证、权限、路由和请求方法;5xx 通常优先检查服务端代码、依赖服务、网关、超时、负载和熔断。502、503、504 尤其要结合网关日志和上游服务日志定位。
不同状态码决定客户端行为:301/308 可长期记忆跳转,302/307 通常按临时跳转处理,401 触发登录或刷新令牌,429 需要退避重试,503 可结合 Retry-After,304 使用缓存,204 不应强行解析响应体。
301 表示永久迁移,浏览器和搜索引擎更可能长期记忆新地址;302 表示临时跳转,原地址仍有效。接口调用中 301 要谨慎使用,避免客户端缓存错误目标。
307 和 308 明确要求客户端保留原请求方法和请求体,适合 POST、PUT 等非 GET 请求的重定向。传统 301、302 在不同客户端中可能被改成 GET,语义不够稳定。
客户端带条件请求头,服务端用 ETag 或 Last-Modified 判断资源是否变化。未变化时返回 304 且不传输完整响应体,客户端继续使用本地缓存,从而减少带宽和响应耗时。
未登录、认证信息缺失或 Token 过期通常返回 401,引导重新认证;身份已确认但没有访问权限时返回 403,表示认证通过但授权不足。
201 能明确表达资源已创建,通常可以配合 Location 或响应体返回新资源地址和标识。它比 200 更准确地表达创建语义,有利于客户端按协议处理。
502 常见于网关收到上游无效响应或连接失败;503 表示服务暂不可用,可能是过载、维护、熔断;504 表示网关等待上游响应超时,需要结合代理和上游日志定位。
429 明确表示请求过多,客户端可以识别为限流而不是服务端异常。重试应使用指数退避、抖动和 Retry-After,避免所有客户端同时重试造成二次冲击。