Administrator
Administrator
发布于 2026-01-16 / 2 阅读
0
0

HTTP 状态码

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:因法律原因不可访问(如政府审查内容)。


排查工具推荐

  1. 浏览器开发者工具:查看 Network 面板中的状态码和请求头。

  2. 命令行工具:

    curl -v http://example.com  # 显示详细请求过程
    httpstat http://example.com # 可视化分析各阶段耗时
    
  3. 在线检测:
    HTTP Status Code Checker
    Postman(模拟 API 请求)


总结流程图

graph TD A[收到错误状态码] --> B{状态码类型?} B -->|4xx| C[检查客户端请求] B -->|5xx| D[检查服务器配置] C --> E[400: 数据格式/参数] C --> F[401: 认证头] C --> G[403: 权限] D --> H[500: 代码错误] D --> I[502: 代理问题] D --> J[504: 超时设置]

掌握这些状态码的差异和解决方案,可以快速定位 90% 的 HTTP 相关问题!


评论