
理解 HTTP 状态码
HTTP 状态码是 Web 服务器返回的三位数字,用于指示 HTTP 请求的结果。它们分为五类,提供关于请求是否成功、失败或需要额外操作的关键信息。

状态码分类
1xx 信息
临时响应,表示服务器已收到请求并正在继续处理。
- 100 Continue:服务器已收到头部,客户端应继续发送请求体
- 101 Switching Protocols:服务器同意升级协议(WebSocket 握手)
- 103 Early Hints:在服务器准备响应时预加载资源
2xx 成功
请求已成功接收、理解并接受。
- 200 OK:GET、POST 的标准成功响应
- 201 Created:资源创建成功(通常在 POST 后)
- 204 No Content:成功但无响应体(DELETE 操作)
- 206 Partial Content:服务器提供部分资源(范围请求)
3xx 重定向
客户端必须采取额外操作才能完成请求。
- 301 Moved Permanently:资源已永久移动;更新你的链接/书签
- 302 Found:临时重定向;原始 URL 可能再次使用
- 304 Not Modified:自上次请求后资源未更改;使用缓存版本
- 307 Temporary Redirect:类似 302 但保留 HTTP 方法
- 308 Permanent Redirect:类似 301 但保留 HTTP 方法

4xx 客户端错误
请求包含客户端错误。
- 400 Bad Request:请求语法错误或参数无效
- 401 Unauthorized:需要认证或凭据无效
- 403 Forbidden:已认证但无权访问该资源
- 404 Not Found:资源在此 URL 不存在
- 405 Method Not Allowed:该端点不支持此 HTTP 方法
- 409 Conflict:状态冲突(例如重复资源、版本冲突)
- 410 Gone:资源已永久移除(不同于 404,确认曾存在)
- 422 Unprocessable Entity:请求格式正确但语义错误
- 429 Too Many Requests:触发速率限制
5xx 服务器错误
服务器未能完成有效请求。
- 500 Internal Server Error:通用服务器端错误
- 501 Not Implemented:服务器不支持该请求方法
- 502 Bad Gateway:上游服务器返回无效响应
- 503 Service Unavailable:服务器暂时不可用(维护、过载)
- 504 Gateway Timeout:上游服务器未及时响应
REST API 设计中的状态码
语义化使用状态码
良好的 API 使用状态码精确传达信息:
GET /users/123 → 200 OK (用户找到)
GET /users/999 → 404 Not Found (用户不存在)
POST /users → 201 Created (用户创建)
DELETE /users/123 → 204 No Content (已删除,无响应体)
POST /login → 401 Unauthorized (密码错误)
GET /admin/data → 403 Forbidden (非管理员)
POST /users → 409 Conflict (邮箱已存在)

常见错误
- 返回 200 并在响应体中包含错误详情("200 OK" 带 {error: "User not found"})
- 对未认证请求使用 403(应为 401)
- 对客户端验证错误使用 500(应为 400/422)
- 无论结果如何始终返回 200
认证与授权混淆
401 Unauthorized 命名不佳——它实际表示“未认证”:
- 你未证明身份
- 发送 WWW-Authenticate 头部指示认证方式
403 Forbidden 表示“未授权”——你已识别但未被允许:
- 服务器知道你是谁
- 你的权限不包含该资源
缓存与状态码
状态码影响 HTTP 缓存行为:
- 200:默认可缓存(配合适当头部)
- 301:浏览器无限期缓存
- 302:通常不缓存
- 404:可缓存(可配置)
- 5xx:通常不缓存
使用 HTTP 状态码参考
我们的工具提供:
- 所有状态码,按类别组织,包含名称和描述
- 常见使用示例,针对每个状态码
- 搜索——按编号或关键词查找状态码
- RFC 参考——链接到官方规范
- 复制代码——快速复制状态码编号用于代码中
在设计 API、调试 HTTP 响应和理解 Web 服务器行为时,将其作为参考随时查阅。