HTTP 状态码是服务器对客户端请求的响应标识,用于快速定位问题。以下是完整的 HTTP 状态码分类及常见问题的解决方案指南:
1. 信息响应(1xx)
• 100 Continue:客户端应继续发送请求体(用于大文件上传预处理)。
• 101 Switching Protocols:服务器同意升级协议(如从 HTTP 升级到 WebSocket)。
• 102 Processing:服务器正在处理请求(用于异步操作)。
常见场景:
• 客户端发送 Expect: 100-continue 头后,服务器返回 100 表示允许继续传输数据。
2. 成功响应(2xx)
• 200 OK:请求成功(最常用)。
• 201 Created:资源创建成功(如 POST 请求后返回新资源 ID)。
• 204 No Content:请求成功但无返回内容(如 DELETE 请求)。
• 206 Partial Content:分块下载或断点续传(配合 Range 头使用)。
常见问题:
• 204 误用:前端期望返回数据但收到 204,需检查 API 设计逻辑。
• 206 配置错误:服务器未支持 Range 请求,需配置 Nginx/Apache 的 range 模块。
3. 重定向(3xx)
• 301 Moved Permanently:永久重定向(SEO 权重转移)。
• 302 Found:临时重定向(浏览器默认用 GET 方法跳转)。
• 307 Temporary Redirect:临时重定向(保持原请求方法)。
• 308 Permanent Redirect:永久重定向(保持原请求方法)。
关键区别:
| 状态码 | 是否缓存 | 是否保留方法 | 典型用途 |
|---|---|---|---|
| 301 | 是 | 否(转 GET) | 域名更换 |
| 302 | 否 | 否(转 GET) | 临时维护页跳转 |
| 307 | 否 | 是 | POST 请求临时重定向 |
| 308 | 是 | 是 | HTTPS 强制升级 |
4. 客户端错误(4xx)
| 状态码 | 含义 | 常见原因及解决方案 |
|---|---|---|
| 400 | Bad Request | 请求语法错误:检查 JSON/表单数据格式、URL 参数编码。 |
| 401 | Unauthorized | 未认证:补充 Authorization 头或检查 Token 有效性。 |
| 403 | Forbidden | 无权限:检查文件权限、RBAC 角色配置或 IP 白名单。 |
| 404 | Not Found | 资源不存在:检查 URL 路径、服务器路由配置或 CDN 缓存过期。 |
| 405 | Method Not Allowed | 请求方法禁用:确认 GET/POST/PUT/DELETE 是否被服务器支持。 |
| 408 | Request Timeout | 客户端请求超时:优化网络或调整服务器 keepalive_timeout(Nginx 默认 60s)。 |
| 429 | Too Many Requests | 限流触发:检查速率限制规则(如 Nginx 的 limit_req 或 API 网关配额)。 |
特殊案例:
• 418 I'm a teapot:彩蛋状态码(RFC 2324),实际用于幽默响应或测试。
5. 服务器错误(5xx)
| 状态码 | 含义 | 常见原因及解决方案 |
|---|---|---|
| 500 | Internal Server Error | 后端代码崩溃:查看服务器日志(如 PHP 的 error_log或 Node.js 的 console.error)。 |
| 502 | Bad Gateway | 上游服务无响应:检查反向代理(如 Nginx)到后端应用(如 PHP-FPM)的连通性。 |
| 503 | Service Unavailable | 服务过载或维护:优化资源或设置临时维护页。 |
| 504 | Gateway Timeout | 上游服务超时:调整代理超时时间(如 Nginx 的 proxy_read_timeout)。 |
| 507 | Insufficient Storage | 磁盘空间不足:清理服务器日志或扩展存储。 |
关键配置:
# Nginx 502/504 优化示例
proxy_connect_timeout 5s;
proxy_read_timeout 60s;
proxy_next_upstream error timeout http_500;
6. 其他实用状态码
• 418 I'm a teapot:彩蛋状态码(RFC 2324),可用于测试或幽默响应。
• 451 Unavailable For Legal Reasons:因法律原因不可访问(如政府审查内容)。
排查工具推荐
-
浏览器开发者工具:查看 Network 面板中的状态码和请求头。
-
命令行工具:
curl -v http://example.com # 显示详细请求过程 httpstat http://example.com # 可视化分析各阶段耗时 -
在线检测:
HTTP Status Code Checker
Postman(模拟 API 请求)
总结流程图
掌握这些状态码的差异和解决方案,可以快速定位 90% 的 HTTP 相关问题!