什么是 HTTP 状态码
HTTP 状态码(HTTP Status Code)是服务器对客户端请求的响应状态标识。每个 HTTP 响应都包含一个三位数字的状态码,告诉客户端请求的结果是成功、失败还是需要进一步操作。
状态码分类
1xx:信息性状态码
表示请求已接收,服务器需要进一步处理。
| 状态码 | 名称 | 说明 | |--------|------|------| | 100 | Continue | 服务器已接收请求头,客户端应继续发送请求体 | | 101 | Switching Protocols | 服务器同意切换协议(如 WebSocket 升级) | | 102 | Processing | 服务器正在处理请求(WebDAV) |
2xx:成功状态码
表示请求被成功接收、理解和处理。
| 状态码 | 名称 | 说明 | |--------|------|------| | 200 | OK | 请求成功(最常用) | | 201 | Created | 请求成功且服务器创建了新资源(POST 成功) | | 202 | Accepted | 请求已接受但尚未处理(异步操作) | | 204 | No Content | 请求成功,但无返回内容(DELETE 成功) | | 206 | Partial Content | 服务器只返回了部分内容(断点续传) |
3xx:重定向状态码
表示需要客户端进一步操作才能完成请求。
| 状态码 | 名称 | 说明 | |--------|------|------| | 301 | Moved Permanently | 资源已永久移动到新 URL(SEO 友好) | | 302 | Found | 资源临时移动到新 URL | | 304 | Not Modified | 资源未修改,可使用缓存 | | 307 | Temporary Redirect | 临时重定向,保持请求方法不变 | | 308 | Permanent Redirect | 永久重定向,保持请求方法不变 |
4xx:客户端错误状态码
表示客户端发送的请求有问题。
| 状态码 | 名称 | 说明 | |--------|------|------| | 400 | Bad Request | 请求格式错误(参数缺失、JSON 解析失败) | | 401 | Unauthorized | 未认证(需要登录) | | 403 | Forbidden | 已认证但无权限访问 | | 404 | Not Found | 资源不存在(最经典的错误) | | 405 | Method Not Allowed | 请求方法不被允许(如 GET 写入资源) | | 409 | Conflict | 资源冲突(如创建已存在的资源) | | 413 | Payload Too Large | 请求体过大 | | 422 | Unprocessable Entity | 请求格式正确但语义错误(参数校验失败) | | 429 | Too Many Requests | 请求过于频繁(限流) |
5xx:服务器错误状态码
表示服务器内部出错。
| 状态码 | 名称 | 说明 | |--------|------|------| | 500 | Internal Server Error | 服务器内部错误(通用错误) | | 502 | Bad Gateway | 网关/代理收到无效响应 | | 503 | Service Unavailable | 服务器暂时不可用(过载或维护) | | 504 | Gateway Timeout | 网关/代理超时 |
如何使用 HTTP 状态码查询工具
使用 DevToolkit Pro 的 HTTP 状态码工具:
- 输入状态码数字(如
404) - 工具显示该状态码的名称、分类和详细说明
- 也可按关键词搜索(如 "not found")
- 提供对应的使用场景和代码示例
API 开发中的状态码最佳实践
RESTful API 状态码规范
// GET /users/123
// 成功
200 OK → { "id": 123, "name": "Alice" }
// 未找到
404 Not Found → { "error": "User not found" }
// POST /users
// 成功创建
201 Created → { "id": 124, "name": "Bob" }
// 参数校验失败
422 Unprocessable Entity → { "errors": ["Email is required"] }
// DELETE /users/123
// 成功删除
204 No Content → (空响应体)
// PUT /users/123
// 未认证
401 Unauthorized → { "error": "Token expired" }
// 无权限
403 Forbidden → { "error": "Insufficient permissions" }
避免滥用 200
所有响应都返回 200 OK 是常见反模式:
// ❌ 错误做法
res.status(200).json({ success: false, error: "User not found" });
// ✅ 正确做法
res.status(404).json({ error: "User not found" });
FAQ
404 和 410 有什么区别?
404 表示资源可能存在但当前未找到(可能是临时的)。410 表示资源曾经存在但已被永久删除,客户端不应再请求。
500 和 503 怎么选?
500 是服务器内部错误(代码 bug、未捕获异常)。503 是服务暂时不可用(过载、维护、依赖服务故障)。
429 响应应该包含什么信息?
应该包含 Retry-After 头告诉客户端多久后可以重试。也可以使用 X-RateLimit-Reset 头返回重置时间戳。
本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页。