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:资源未修改(缓存有效)
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响应可形式化表示为:
注意事项[编辑 | 编辑源代码]
- 不要依赖状态码文本描述(可能被修改)
- 某些框架可能自定义非标准状态码(如nginx的444)
- 客户端应处理所有可能的状态码,而不仅是200
扩展阅读[编辑 | 编辑源代码]
- HTTP/2和HTTP/3对状态码语义的保持
- WebDAV扩展状态码(如423 Locked)
- 状态码在CDN和负载均衡中的特殊处理