Cell Stack

← 返回·

HTTP 状态码:15 个常见的状态码详解

最完整的 HTTP 状态码指南,详细解析 15 个最常见的 HTTP 状态码。从 2xx 成功响应到 5xx 服务器错误,深入理解互联网世界的通用语言,让开发者、运维和产品经理都能在网络调试中如鱼得水。

013.webp

当你在浏览器输入网址按下回车,一场无声的对话正在发生。服务器用三位数字回应着每个请求——这些 HTTP 状态码是互联网世界的通用语言,无论你是开发者、运维工程师还是产品经理,理解它们都能让你在数字世界中如鱼得水。

为什么这些数字代码如此重要?

1. 技术协作的通用语言

  • 前端开发者:精准处理用户界面反馈
  • 后端工程师:设计清晰的 API 响应规范
  • 运维团队:快速定位系统故障点
  • 产品经理:理解功能实现的边界条件

2. 效率提升的关键

3. 用户体验的隐形守护者

  • 401 状态时自动跳转登录页
  • 503 状态展示友好维护页面
  • 429 状态提示用户稍后重试

五大类状态码全景解析

状态类别数字范围核心意义常见状态码
信息响应100-199请求已收到,继续处理中100, 101, 103
操作成功200-299请求已成功处理200, 201, 204, 206
重定向300-399需要进一步操作完成请求301, 302, 304, 307
客户端错误400-499请求包含错误或无法完成400, 401, 403, 404, 429
服务端错误500-599服务器未能完成有效请求500, 502, 503, 504

关键状态码深度剖析

1. 100 Continue:大文件上传的"绿灯"

http
POST /upload-large-file HTTP/1.1Host: example.comContent-Length: 10000000Expect: 100-continueHTTP/1.1 100 Continue

应用场景
客户端发送大文件前先询问服务器是否接受,避免传输被拒造成的带宽浪费

2. 201 Created:资源创建的标准响应

http
POST /projects HTTP/1.1Content-Type: application/json{"name": "新项目"}HTTP/1.1 201 CreatedLocation: /projects/789Content-Type: application/json{"id": 789, "name": "新项目"}

最佳实践

  • 必须包含 Location 头部指向新资源地址
  • 响应体推荐包含创建的资源表示

3. 304 Not Modified:缓存优化的核心

http
GET /logo.png HTTP/1.1Host: example.comIf-Modified-Since: Wed, 21 Oct 2025 07:28:00 GMTHTTP/1.1 304 Not Modified

工作原理
当客户端缓存有效时,服务器返回 304 可节省约 80%的图片传输流量

4. 400 vs 422:参数错误的精确表达

状态码适用场景示例
400基础语法错误JSON 解析失败
422语义错误(业务规则违反)用户名已存在

5. 429 Too Many Requests:流量控制的守护者

http
HTTP/1.1 429 Too Many RequestsRetry-After: 60X-RateLimit-Limit: 100X-RateLimit-Remaining: 0X-RateLimit-Reset: 1627833600

关键头部

  • Retry-After:建议重试等待时间(秒或日期)
  • X-RateLimit-*:限流配额信息

6. 503 Service Unavailable:优雅的服务降级

http
HTTP/1.1 503 Service UnavailableRetry-After: 300Content-Type: application/json{  "error": "service_maintenance",  "message": "系统升级中,预计恢复时间:2025-01-23T08:00:00Z",  "status": 503}

最佳实践

  • 维护期间返回 503 而非 404
  • 提供预计恢复时间
  • 返回标准错误格式

状态码使用黄金法则

1. 精确性原则

  • 避免滥用 200 处理错误
    json
    // 反模式{  "status": 200,  "error": "Invalid credentials"}
  • 正确做法:401 + 标准错误体

2. 安全与权限控制

状态码安全含义日志记录要求
401身份验证失败记录 IP 和尝试次数
403权限不足记录用户和资源路径
404资源不存在防止路径枚举攻击

3. 重定向的正确选择

4. 监控告警策略

yaml
# 监控系统配置示例alert_rules:  - name: server_errors_high    condition: status:5xx > 5% of total    severity: critical  - name: client_errors_sudden_increase    condition: rate(status:4xx[5m]) > 100    severity: warning

跨职能团队协作指南

前端开发者

javascript
// 全局错误处理示例axios.interceptors.response.use(null, (error) => {  const status = error.response?.status  switch (status) {    case 401:      store.dispatch('logout')      break    case 429:      showRateLimitAlert(error.response.headers)      break    default:      showGenericError(status)  }  return Promise.reject(error)})

后端工程师

python
# Flask 状态码返回最佳实践@app.route('/projects', methods=['POST'])def create_project():    data = request.get_json()    if not data:        return {'error': 'Invalid JSON'}, 400  # 格式错误    if Project.exists(data['name']):        return {'error': 'Name already used'}, 422  # 语义错误    project = Project.create(data)    return project.to_dict(), 201, {'Location': f'/projects/{project.id}'}

运维工程师

bash
# Nginx 自定义错误页面error_page 404 /custom_404.html;error_page 500 502 503 504 /maintenance.html;# 限流配置limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;location /api/ {    limit_req zone=api burst=20;    proxy_pass http://backend;}

状态码知识体系

结语:数字背后的网络哲学

HTTP 状态码不仅是技术规范,更是系统设计的哲学体现:

  1. 精确沟通:每个数字传递特定语义
  2. 分层处理:客户端与服务端的责任分离
  3. 优雅降级:在故障时提供最大可用性
  4. 透明协作:跨团队的统一沟通语言

当你在浏览器看到 404 页面时,记住这不仅是"未找到"的提示,更是整个互联网架构在对你说话。理解这些三位数的代码,就是理解数字世界如何运作的钥匙。

引用

  1. RFC: Response Status Codes
  2. MDN: HTTP 响应状态码

留言讨论