Skip to content

模块导航: 总入口 · 总纲与方法 · 后端场景 · AI与算法工程 · 国企与金融 · 网络问答


9. HTTP 常见状态码(热度 280 · 进阶) ​

Q: 说出常见 HTTP 状态码及含义。

A:

分类与常见码 ​

1xx 信息: 100 Continue(请继续传 body);101 Switching Protocols(协议升级,如 WebSocket)。

2xx 成功: 200 OK;201 Created(常配 Location);204 No Content(无 body,DELETE 常用);206 Partial Content(Range/断点续传)。

3xx 重定向: 301 永久(浏览器会缓存 Location);302 临时(历史客户端可能把 POST 改成 GET);303 临时,且语义就是改用 GET/HEAD 检索 Location(是协议设计不是历史遗留);304 Not Modified(协商缓存命中,无响应体);307 临时且保持方法;308 永久且保持方法。

4xx 客户端错误: 400 语法/参数错;401 未认证;403 无权限/策略拒绝;404 不存在;405 方法不允许;408 请求超时;409 冲突;413 体过大;429 限流(可带 Retry-After)。

5xx 服务端错误: 500 内部错误;502 网关从上游收到非法响应;503 暂不可用;504 网关等待上游超时。

设计动机 ​

  • 状态码让客户端可编程处理: 缓存、重试、认证、降级逻辑都依赖语义化的码,而不是解析错误文案。
  • 401 vs 403: 401=不知道你是谁(请认证);403=知道你是谁但不允许。
  • 502 vs 504: 502 侧重「网关从上游收到无效响应」(非 HTTP、畸形、协议错乱),服务过载/停机是 503;504 侧重「等待上游超时」。中间层(Nginx)语义非常关键。

常见追问 ​

追问 1:301 和 302/307 的缓存与方法语义差异?

  • 答题要点: 301 永久,客户端可缓存重定向目标;302 临时不长期缓存;307 临时且强制保持方法与 body;301/302 在历史客户端上可能把 POST 改成 GET,要保持方法应使用 307/308。

追问 2:401 和 403 有什么区别?

  • 答题要点: 401 未认证——应引导登录/带 Authorization;403 已认证但无权限或策略禁止——重新登录通常无效。

追问 3:502 和 504 排查方向?

  • 答题要点: 502——看后端进程是否存活、端口是否监听、上游是否返回非 HTTP/畸形响应(Nginx error log)。504——看后端处理是否过慢、代理 proxy_read_timeout 是否过短、依赖(DB/下游)是否卡死。先比对 Nginx $upstream_status 与应用日志。

易错点 ​

易错说法纠正
「304 服务器返回了新内容」304 表示未修改,无 body,用本地缓存
「404 一定是前端路径写错」也可能是权限隐藏、API 路径、部署版本问题
「500 和 502 一样」500 应用内部错误;502 多是代理与上游之间
「401 是没权限」401 是未认证;没权限更多是 403
「HTTPS 成功就一定是 200」还可能是 301/ 302/ 304/ 4xx/ 5xx

与选择题对照 ​

  • 主库 150: 第 86 题(404)、第 87 题(301)、第 84 题(HTTP 特点)、第 146 题(ETag/协商缓存与 304)、第 145 题(keep-alive=连接层语义,与 Cache-Control 这类头字段语义分工)。
  • 补题 16: 无直接状态码选择题;面试向更深。
  • 口述联动: 选择题考单个码;面试常考 301 vs 302、401 vs 403、502 vs 504 三组辨析 + 排障。

工程 / 抓包背景 ​

  • curl:
    bash
    curl -I https://example.com
    curl -i https://api.example.com/health
    curl -v -H "If-None-Match: \"etag\"" https://example.com/ # 期待 304
  • Nginx: access log 记录 status;error log 看 upstream 502/504;proxy_next_upstream 决定重试策略。
  • 浏览器: Network 面板看 status、From disk cache / memory cache 与 304。
  • Wireshark: http.response.code == 304 等过滤。
  • 网关排查口诀: 502 看进程与协议;504 看超时与依赖。

持续学习,持续积累。