本文最后更新于15 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
以下是 HTTP 状态码 的详细说明,涵盖 3xx 重定向、4xx 客户端错误 和 5xx 服务器错误 的常见状态码:
3xx 重定向类
301 Moved Permanently(永久重定向)
- 含义:请求的资源已永久移动到新位置,浏览器会缓存此跳转。
- 用途:域名切换、HTTPS 强制跳转。
- Nginx 示例:
return 301 https://example.com$request_uri;
302 Found(临时重定向)
- 含义:资源临时跳转到新地址,浏览器不会缓存。
- 用途:A/B 测试、临时维护跳转。
- Nginx 示例:
return 302 https://temp.example.com;
305 Use Proxy(需通过代理访问)
- 含义:请求必须通过指定的代理服务器访问(已废弃,现代浏览器很少支持)。
- 示例:
HTTP/1.1 305 Use Proxy
Location: http://proxy.example.com
307 Temporary Redirect(临时重定向,严格版 302)
- 含义:与 302 类似,但强制要求重定向时保持相同的 HTTP 方法(如 POST 请求不会变成 GET)。
- 用途:API 重定向时保留请求方法。
4xx 客户端错误类
400 Bad Request(错误请求)
- 含义:请求语法错误,服务器无法解析。
- 常见原因:无效的请求头、畸形 JSON/XML 数据。
402 Payment Required(需付费)
- 含义:保留状态码,通常用于支付场景(如 API 调用需订阅)。
403 Forbidden(禁止访问)
- 含义:服务器拒绝请求,即使身份验证也无法访问。
- 常见原因:文件权限不足、IP 被禁用。
- Nginx 示例:
location /admin/ {
deny all;
return 403;
}
404 Not Found(资源不存在)
- 含义:请求的资源未找到。
- 解决方案:检查 URL 拼写或配置路由。
406 Not Acceptable(无法满足请求)
- 含义:服务器无法返回客户端要求的格式(如 Accept 头指定了不支持的 Content-Type)。
408 Request Timeout(请求超时)
- 含义:服务器等待客户端发送请求超时。
- 常见原因:网络延迟或客户端未及时发送数据。
409 Conflict(冲突)
- 含义:请求与服务器当前状态冲突(如重复提交同一资源)。
410 Gone(资源已永久删除)
- 含义:类似 404,但明确表示资源已主动删除且不会恢复。
413 Payload Too Large(请求体过大)
- 含义:请求数据(如文件上传)超过服务器限制。
- Nginx 解决方案:
client_max_body_size 100M; # 调整最大允许请求体大小
417 Expectation Failed(预期失败)
- 含义:服务器无法满足
Expect请求头的条件(如Expect: 100-continue)。
418 I’m a teapot(彩蛋状态码)
- 含义:愚人节玩笑代码,表示“我是茶壶”,无实际用途。
420 Enhance Your Calm(Twitter 专用)
- 含义:Twitter API 限速时的返回码(非标准)。
422 Unprocessable Entity(无法处理的实体)
- 含义:请求格式正确但语义错误(如缺少必填字段)。
- 常见于:REST API 数据验证失败。
5xx 服务器错误类
500 Internal Server Error(服务器内部错误)
- 含义:服务器遇到未知错误。
- 排查方法:
tail -f /var/log/nginx/error.log # 查看错误日志
502 Bad Gateway(网关错误)
- 含义:Nginx 作为反向代理时,无法从上游服务器获取响应。
- 常见原因:后端服务崩溃或超时。
- 解决方案:
proxy_connect_timeout 60s; # 增加超时时间
503 Service Unavailable(服务不可用)
- 含义:服务器临时过载或维护。
- Nginx 示例:
location / {
return 503;
}
504 Gateway Timeout(网关超时)
- 含义:Nginx 等待上游服务器响应超时。
- 解决方案:
proxy_read_timeout 300s; # 默认 60s,建议调整
总结对比表
| 状态码 | 类别 | 含义 | 典型场景 |
|---|---|---|---|
| 301 | 重定向 | 永久跳转 | 域名变更、HTTPS 跳转 |
| 302 | 重定向 | 临时跳转 | A/B 测试 |
| 307 | 重定向 | 临时跳转且保留方法 | API 重定向 |
| 400 | 客户端错误 | 请求语法错误 | 无效 JSON 数据 |
| 403 | 客户端错误 | 禁止访问 | 无权限访问目录 |
| 404 | 客户端错误 | 资源不存在 | URL 拼写错误 |
| 413 | 客户端错误 | 请求体过大 | 文件上传超限 |
| 418 | 彩蛋 | “我是茶壶” | 愚人节玩笑 |
| 500 | 服务器错误 | 服务器内部崩溃 | 代码异常 |
| 502 | 服务器错误 | 网关错误 | 后端服务宕机 |
| 504 | 服务器错误 | 网关超时 | 后端响应缓慢 |
排查工具
- 查看 HTTP 响应码:
curl -I https://example.com
- 检查 Nginx 日志:
tail -f /var/log/nginx/error.log
- 模拟请求(如测试 413):
dd if=/dev/zero bs=1M count=200 | curl -X POST --data-binary @- http://example.com
掌握这些状态码能快速定位问题,尤其在调试 API 或配置 Web 服务器时非常有用!

