跳转到内容

HTTP状态码

来自代码酷

HTTP状态码[编辑 | 编辑源代码]

HTTP状态码(HTTP Status Code)是服务器在响应客户端请求时返回的三位数字代码,用于表示请求的处理结果。这些状态码遵循HTTP协议标准(RFC 7231等),帮助开发者和用户理解请求是否成功、是否需要重定向或是否出现错误。

状态码分类[编辑 | 编辑源代码]

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

范围 类别 描述
1xx 信息性状态码 请求已被接收,继续处理
2xx 成功状态码 请求已成功被服务器接收、理解并接受
3xx 重定向状态码 需要进一步操作以完成请求
4xx 客户端错误状态码 请求包含语法错误或无法完成
5xx 服务器错误状态码 服务器在处理请求时发生错误

常见状态码详解[编辑 | 编辑源代码]

1xx 信息响应[编辑 | 编辑源代码]

  • 100 Continue:客户端应继续发送请求的剩余部分
  • 101 Switching Protocols:服务器同意切换协议(如升级到WebSocket)

2xx 成功[编辑 | 编辑源代码]

  • 200 OK:请求成功,响应包含请求的数据
  • 201 Created:资源创建成功(常用于POST请求)
  • 204 No Content:请求成功但无返回内容
# Python示例:检查HTTP响应状态码
import requests

response = requests.get('https://api.example.com/data')
if response.status_code == 200:
    print("请求成功:", response.json())
elif response.status_code == 204:
    print("请求成功但无返回内容")

3xx 重定向[编辑 | 编辑源代码]

  • 301 Moved Permanently:资源已永久移动到新URL
  • 302 Found:资源临时从不同URL响应
  • 304 Not Modified:资源未修改(缓存有效)

graph LR A[客户端请求] --> B{需要重定向?} B -->|301/302| C[发送新请求到Location头指定URL] B -->|304| D[使用缓存]

4xx 客户端错误[编辑 | 编辑源代码]

  • 400 Bad Request:请求语法错误
  • 401 Unauthorized:需要身份验证
  • 403 Forbidden:服务器拒绝请求
  • 404 Not Found:请求资源不存在

5xx 服务器错误[编辑 | 编辑源代码]

  • 500 Internal Server Error:服务器内部错误
  • 502 Bad Gateway:网关或代理服务器收到无效响应
  • 503 Service Unavailable:服务器暂时过载或维护

实际应用案例[编辑 | 编辑源代码]

电商网站场景: 1. 用户访问不存在的商品页 → 返回404 2. 未登录用户尝试结算 → 返回401 3. 商品URL永久变更 → 返回301 + Location头 4. 服务器数据库崩溃 → 返回503

状态码与REST API设计[编辑 | 编辑源代码]

良好的REST API应合理使用状态码:

  • 创建资源:201
  • 删除资源:204
  • 验证失败:401/403
  • 参数错误:400
// Express.js示例:返回不同状态码
app.get('/api/users/:id', (req, res) => {
    const user = getUserById(req.params.id);
    if (!user) return res.status(404).json({ error: '用户不存在' });
    if (!checkPermission(req.user)) return res.sendStatus(403);
    res.status(200).json(user);
});

调试技巧[编辑 | 编辑源代码]

  • 使用浏览器开发者工具查看网络请求状态码
  • curl命令查看详细响应:
curl -v https://example.com

数学表示[编辑 | 编辑源代码]

HTTP响应可形式化表示为: Response=(StatusCode,Headers,Body?)其中StatusCode{100,...,599}

注意事项[编辑 | 编辑源代码]

  • 不要依赖状态码文本描述(可能被修改)
  • 某些框架可能自定义非标准状态码(如nginx的444)
  • 客户端应处理所有可能的状态码,而不仅是200

扩展阅读[编辑 | 编辑源代码]

  • HTTP/2和HTTP/3对状态码语义的保持
  • WebDAV扩展状态码(如423 Locked)
  • 状态码在CDN和负载均衡中的特殊处理