HTTP

HTTP 状态码完全指南(详解版)

一篇面向 Web / 后端 / 前端 / GIS Web 应用开发者 的 HTTP 状态码系统性参考文章。


一、什么是 HTTP 状态码

HTTP 状态码(HTTP Status Code) 是服务器在响应客户端(浏览器、APP、程序)请求时,返回的一个 三位数字,用于说明:

👉 这次请求发生了什么、结果如何、是否需要进一步操作

HTTP 状态码是 HTTP 协议语义的核心组成部分,对于:

  • 前后端接口设计
  • RESTful API 规范
  • 错误处理与调试
  • 网络性能与安全分析

都具有非常重要的意义。


二、HTTP 状态码的五大类

HTTP 状态码按照 首位数字 分为五大类:

分类 范围 含义
1xx 100–199 信息性响应(请求已接收)
2xx 200–299 成功(请求已成功处理)
3xx 300–399 重定向(需要进一步操作)
4xx 400–499 客户端错误
5xx 500–599 服务器错误

三、1xx:信息性状态码(Informational)

表示请求已被接收,正在处理,很少在业务代码中直接使用

100 Continue

  • 含义:客户端可以继续发送请求体
  • 场景:大文件上传前的确认机制

101 Switching Protocols

  • 含义:服务器同意切换协议
  • 场景:HTTP → WebSocket

四、2xx:成功状态码(Success)

最重要、最常用的一类状态码,表示请求被正确处理。

200 OK

  • 含义:请求成功
  • 场景:

    • GET 查询成功
    • PUT / PATCH 更新成功
GET /api/fields/123
HTTP/1.1 200 OK

201 Created

  • 含义:资源创建成功
  • 场景:POST 新建资源
  • 建议:返回新资源的 URL
POST /api/fields
HTTP/1.1 201 Created
Location: /api/fields/456

202 Accepted

  • 含义:请求已接收,但尚未处理完成
  • 场景:

    • 异步任务
    • 后台计算(如 GIS 插值、模型分析)

204 No Content

  • 含义:请求成功,但无返回内容
  • 场景:

    • 删除成功
    • 仅触发动作的接口
DELETE /api/fields/123
HTTP/1.1 204 No Content

五、3xx:重定向状态码(Redirection)

表示资源位置发生变化,需要客户端采取进一步操作。

301 Moved Permanently

  • 含义:永久重定向
  • 场景:

    • 域名迁移
    • SEO 优化

302 Found

  • 含义:临时重定向(历史遗留)
  • 注意:可能被浏览器当作 GET 请求处理

303 See Other

  • 含义:使用 GET 访问另一个 URI
  • 场景:POST 后跳转页面

304 Not Modified

  • 含义:资源未修改
  • 场景:

    • 浏览器缓存
    • ETag / If-Modified-Since

六、4xx:客户端错误(Client Error)

表示问题出在客户端请求本身

400 Bad Request

  • 含义:请求格式错误
  • 常见原因:

    • JSON 语法错误
    • 参数缺失

401 Unauthorized

  • 含义:未认证
  • 特点:

    • 需要登录
    • 通常配合 WWW-Authenticate

⚠️ 注意:401 ≠ 权限不足


403 Forbidden

  • 含义:已认证,但无权限
  • 场景:

    • 普通用户访问管理员接口

404 Not Found

  • 含义:资源不存在
  • 场景:

    • URL 错误
    • 资源被删除

405 Method Not Allowed

  • 含义:请求方法不被允许
  • 示例:
POST /api/fields/123
HTTP/1.1 405 Method Not Allowed
Allow: GET, PUT

409 Conflict

  • 含义:资源冲突
  • 场景:

    • 重复创建
    • 乐观锁冲突

422 Unprocessable Entity

  • 含义:语义正确,但业务校验失败
  • 场景:

    • 表单校验
    • 数据规则不满足

七、5xx:服务器错误(Server Error)

表示服务器在处理请求时发生异常

500 Internal Server Error

  • 含义:服务器内部错误
  • 原因:

    • 未捕获异常
    • 代码 Bug

502 Bad Gateway

  • 含义:上游服务器返回无效响应
  • 场景:

    • 反向代理
    • 微服务调用失败

503 Service Unavailable

  • 含义:服务暂不可用
  • 场景:

    • 服务维护
    • 系统过载

504 Gateway Timeout

  • 含义:上游服务超时
  • 场景:

    • GIS 大规模计算
    • 数据库响应过慢

八、RESTful API 状态码设计建议

1️⃣ 成功不要只用 200

场景 推荐状态码
创建资源 201
删除成功 204
异步处理 202

2️⃣ 错误状态码要“语义准确”

错误场景 正确做法
未登录 401
无权限 403
参数错误 400 / 422
资源不存在 404

3️⃣ 状态码 + 错误信息结构示例

{
  "code": 422,
  "message": "Validation failed",
  "details": {
    "area": "must be greater than 0"
  }
}

九、常见误区总结

❌ 所有错误都返回 200

❌ 用 500 表示业务校验失败

❌ 401 和 403 混用

❌ 前端只判断 code,不看 HTTP 状态码


十、结语

HTTP 状态码不仅是 网络协议的一部分,更是 接口设计质量的重要体现

一个设计良好的接口,应该做到:

  • 状态码语义清晰
  • 前后端理解一致
  • 错误可定位、可处理