HTTP 状态码详解

HTTP 状态码(HTTP Status Code)是服务器对客户端请求处理结果的标准化反馈,由 3 位数字组成。首位数字定义了状态码所属的大类,后两位用于细分具体语义。

核心作用

  1. 明确请求是否成功
  2. 判断问题来源(客户端 / 服务器)
  3. 指导客户端下一步行为(重试、跳转、修正请求等)

一句话总览

  • 1XX:还在处理(协议层交互)
  • 2XX:成功(不同语义的成功结果)
  • 3XX:需要跳转(资源位置变更)
  • 4XX:客户端错(服务器拒绝请求)
  • 5XX:服务器错(请求合法但服务异常)

一、HTTP 状态码整体分类

分类 含义
1XX 信息性状态(处理中)
2XX 成功
3XX 重定向
4XX 客户端错误
5XX 服务器错误

二、1XX 信息性状态码(请求正在处理中)

仅用于 协议层交互,不代表请求完成
浏览器与普通业务代码几乎感知不到

100 Continue(继续)

说明:服务器已收到请求头,允许客户端继续发送请求体。
典型场景

  • 大文件上传
  • POST 提交大量数据
  • 请求头包含 Expect: 100-continue
    客户端行为:继续发送请求体;若请求已完成,可忽略该响应。

101 Switching Protocols(切换协议)

说明:服务器同意切换通信协议。
典型场景

  • HTTP → WebSocket
  • HTTP/1.1 → HTTP/2

102 Processing(处理中,WebDAV)

说明:服务器已接收请求并开始处理,但尚未完成。
场景

  • WebDAV 大文件操作
  • 批量远程文件处理

三、2XX 成功状态码(重点)

不同 2XX 状态码代表 “成功的不同语义”
不应只使用 200

200 OK(请求成功)

  • 请求成功
  • 返回完整响应体
  • 最通用的成功状态码
    常见场景:网页访问、接口查询、文件下载

201 Created(资源创建成功)

说明:请求成功,并 新建了资源
特征

  • 通常返回 Location 响应头
  • REST API 中非常重要
POST /users
→ 201 Created
Location: /users/123

202 Accepted(请求已接受,尚未处理完成)

说明:请求合法,但处理将在后台异步执行。
典型场景

  • 批量任务
  • 消息投递
  • 异步计算
    注意
  • 不保证最终成功
  • 不返回处理结果

203 Non-Authoritative Information(非权威信息)

  • 返回结果经过代理修改
  • 实际项目中极少使用

204 No Content(成功但无返回内容)

说明

  • 请求成功
  • 响应体为空
  • 不改变当前页面状态
    典型场景
  • DELETE 删除
  • PUT 更新
  • 心跳接口

205 Reset Content(重置内容)

  • 请求成功
  • 提示客户端重置当前视图
  • 浏览器支持有限,实际使用极少

206 Partial Content(部分内容)

说明:服务器返回资源的一部分。
前提:请求头包含 Range
典型场景

  • 断点续传
  • 视频 / 音频分段加载
Range: bytes=0-1023
→ 206 Partial Content

✅ 2XX 使用建议

场景 推荐状态码
查询成功 200
创建资源 201
异步任务 202
删除成功 204
分段下载 206

四、3XX 重定向状态码

表示资源位置发生变化
客户端需重新请求

300 Multiple Choices(多种选择)

  • 资源存在多个版本
  • 浏览器通常自动选择
  • 实际使用较少

301 Moved Permanently(永久重定向)

  • 资源永久迁移
  • 浏览器会缓存重定向关系
  • SEO 场景常用

302 Found(临时重定向,HTTP/1.0)

  • 临时跳转
  • 可能将 POST 改为 GET

307 Temporary Redirect(临时重定向,HTTP/1.1)

  • 保留请求方法
  • 比 302 更安全

⭐ 308 Permanent Redirect(永久重定向,保留方法)

  • 类似 301
  • 强制保留原请求方法
  • 更适合 API / REST 场景

304 Not Modified(未修改)

说明

  • 资源未发生变化
  • 使用本地缓存
    前提
  • 请求头包含 If-Modified-Since
  • 请求头包含 If-None-Match

五、4XX 客户端错误状态码(重点)

4XX 的本质是:
服务器拒绝当前请求

1️⃣ 请求格式 / 内容错误

400 Bad Request
  • 参数格式错误
  • JSON 解析失败
  • 请求体不合法
    👉 最常见接口错误
415 Unsupported Media Type
  • Content-Type 不被支持
  • 前后端联调高频错误
422 Unprocessable Entity(非常重要)
  • 语法正确
  • 业务校验失败
    示例
{
  "email": "invalid-email"
}

👉 比 400 更“语义正确”,强烈推荐在 REST API 中使用

2️⃣ 身份 & 权限问题

401 Unauthorized
  • 未登录 / Token 无效
  • 需要重新认证
403 Forbidden
  • 已登录
  • 但无权限

3️⃣ 资源相关错误

404 Not Found
  • 资源不存在
  • 接口路径错误
  • ID 不存在
410 Gone(资源永久删除)
  • 与 404 不同
  • 明确表示:永远不会再有
    👉 SEO / 资源下线非常有价值

4️⃣ 请求方式错误

405 Method Not Allowed
  • 方法不被资源支持
  • 通常返回 Allow

5️⃣ 请求频率 & 并发限制

408 Request Timeout
  • 客户端请求未完整发送
429 Too Many Requests(非常重要)
  • 请求过于频繁
  • 限流核心状态码
Retry-After: 60

✅ 常见 4XX 状态码速记

状态码 含义
400 参数错误
401 未认证
403 无权限
404 不存在
405 方法不支持
415 媒体类型错误
422 业务校验失败
429 被限流

六、5XX 服务器错误状态码

请求是合法的
错误发生在服务器端

500 Internal Server Error

  • 代码 / 配置 / 运行异常(后端代码异常、数据库错误、配置错误)
  • 万能兜底,但不应滥用

501 Not Implemented

  • 服务器不支持该请求方法
  • 功能尚未实现

502 Bad Gateway

  • 网关收到了上游无效响应
  • 上游服务宕机 / 异常

503 Service Unavailable

  • 服务器暂时不可用(维护 / 过载)
  • 可恢复
  • 通常可重试

504 Gateway Timeout

  • 网关等不到上游响应
  • 上游服务响应超时

七、如何根据 HTTP 状态码进行错误排查(实战重点)

1️⃣ 快速判断原则(开发者排查思路核心)

2XX → 正常流程
3XX → 检查跳转逻辑
4XX → 优先检查客户端
5XX → 优先检查服务器

2️⃣ 客户端 / 前端处理策略

状态码 建议处理
200 正常渲染
201 记录资源地址
204 不刷新页面
401 跳转登录
403 提示无权限
404 空态 / 404 页面
429 延迟重试
5XX 提示稍后重试

3️⃣ 后端接口设计建议(非常重要)

❌ 不要所有错误都返回 200
❌ 不要用 500 表示业务校验失败
✅ 语义正确比“省事”重要

推荐设计

场景 状态码
参数错误 400 / 422
未登录 401
无权限 403
不存在 404
冲突 409
限流 429
服务异常 5XX

4️⃣ 运维 / 网关排查方向

状态码 优先排查
500 应用日志
502 上游服务
503 服务负载
504 超时配置

八、终极总结(面试 & 实战版)

状态码本质

HTTP 状态码 = 请求结果 + 问题归属

  • 4XX:你(客户端)的问题
  • 5XX:我(服务器)的问题

必背高频状态码

200  成功
201  创建
301  永久重定向
302  临时重定向
401  未登录
403  无权限
404  不存在
429  限流
500  服务器错误
503  服务不可用

👋 关注我!持续分享 C# 实战技巧、代码示例 & 技术干货
image

posted @ 2026-01-16 22:36  bugcome  阅读(48)  评论(0)    收藏  举报