HTTP状态码大全:404/500/301/302含义与解决方案
浏览器打开网页显示"404 Not Found",接口调试返回"500 Internal Server Error",网站换域名要做"301重定向"——HTTP状态码是每个开发者和网站运营者必须了解的基础知识。本文一次讲透。
HTTP状态码是什么
每当浏览器向服务器发送请求,服务器会返回一个三位数字的状态码,表示请求的处理结果。通过这个数字,你就能知道请求是成功了、失败了、还是需要跳转。
状态码按第一位数字分为5大类:
| 范围 | 类别 | 含义 |
| 1xx | 信息性 | 请求已接收,继续处理 |
| 2xx | 成功 | 请求已成功接收和处理 |
| 3xx | 重定向 | 需要进一步操作才能完成请求 |
| 4xx | 客户端错误 | 请求有误,服务器无法处理 |
| 5xx | 服务端错误 | 服务器处理出错 |
常见状态码详解
2xx:成功
#### 200 OK
最理想的状态码。请求成功,响应体中包含了请求的资源。
- 场景:正常打开网页、接口返回数据
- 无需处理
#### 201 Created
请求成功且服务器创建了新资源。常用于POST请求创建数据后返回。
- 场景:提交表单创建新用户、RESTful API的POST操作
- 无需处理
#### 204 No Content
请求成功但没有返回内容。常用于DELETE操作或PUT更新成功后。
- 场景:删除资源后服务器不返回body
- 无需处理
3xx:重定向
#### 301 Moved Permanently(永久重定向)
资源已永久移动到新URL。搜索引擎会将旧URL的权重转移到新URL。
常见场景:
- 网站换域名:
old.com→new.com - HTTP转HTTPS:
http://→https:// - URL结构调整:
/blog/post/123→/article/123
SEO影响:301会将旧页面的搜索权重传递给新页面,是网站迁移时最安全的重定向方式。
配置示例(Nginx):
server {
listen 80;
server_name old-domain.com;
return 301 https://new-domain.com$request_uri;
}
#### 302 Found(临时重定向)
资源临时移动到新URL。搜索引擎不会转移权重。
常见场景:
- 未登录用户跳转到登录页
- 临时维护页面跳转
- A/B测试分流
301 vs 302的选择:
- 永久变更用301
- 临时跳转用302
- 搞混了可能影响SEO效果
#### 304 Not Modified
客户端发送了条件请求(带If-Modified-Since或If-None-Match),服务器判断资源未修改,告诉客户端使用本地缓存。
- 场景:浏览器缓存机制
- 优化意义:减少传输量,加快页面加载
4xx:客户端错误
#### 400 Bad Request
请求语法错误,服务器无法理解。
常见原因:
- 请求参数格式错误
- JSON格式不合法
- 必填参数缺失
排查方法:检查请求体格式,用 JSON格式化工具 验证JSON是否正确。
#### 401 Unauthorized
请求未认证。需要登录或提供认证信息。
常见原因:
- 未登录访问需要认证的接口
- Token过期或无效
- Basic Auth凭证错误
解决方案:在请求头中添加认证信息:
Authorization: Bearer <token>
#### 403 Forbidden
服务器理解请求但拒绝执行。与401不同,403是"已认证但无权限"。
常见原因:
- 用户权限不足
- 服务器配置禁止访问(如目录列表被禁)
- IP被限制访问
- 文件权限不对
#### 404 Not Found
请求的资源不存在。最常见的错误状态码。
常见原因:
- URL拼写错误
- 页面已被删除
- 路由配置错误
- 静态文件路径不对
排查方法:
- 检查URL是否正确
- 检查路由配置
- 检查文件是否存在于正确路径
- 检查服务器root配置
SEO处理:确保404页面返回真正的404状态码(而不是200),否则搜索引擎会索引错误页面。同时设置404页面引导用户回到有效页面。
#### 405 Method Not Allowed
请求方法不被允许。比如接口只支持GET,你用了POST。
常见原因:
- 用了错误的HTTP方法(GET/POST/PUT/DELETE)
- CORS配置未允许相应方法
- 路由配置只注册了特定方法
#### 429 Too Many Requests
请求频率超过限制(限流)。
解决方案:
- 降低请求频率
- 检查响应头中的
Retry-After字段,等待指定时间后重试 - 实现请求队列和退避重试机制
5xx:服务端错误
#### 500 Internal Server Error
服务器内部错误。最笼统的服务端错误码,需要查看服务器日志定位具体原因。
常见原因:
- 代码异常未捕获
- 数据库连接失败
- 配置文件错误
- 内存溢出
排查方法:
- 查看服务器错误日志
- 检查最近部署的代码变更
- 检查数据库连接状态
- 检查服务器资源(CPU/内存/磁盘)
#### 502 Bad Gateway
网关或代理从上游服务器收到无效响应。
常见原因:
- 后端服务未启动或已崩溃
- Nginx代理的后端服务无响应
- 防火墙阻断连接
排查方法:
# 检查后端服务是否运行
ps aux | grep node
# 检查端口是否监听
netstat -tlnp | grep 3000
# 检查Nginx配置
nginx -t
#### 503 Service Unavailable
服务暂时不可用。通常是服务器过载或维护中。
常见原因:
- 服务器维护中
- 流量过大导致过载
- 后端服务正在重启
处理方式:设置Retry-After响应头,告知客户端何时重试。
#### 504 Gateway Timeout
网关等待上游服务器响应超时。
常见原因:
- 后端处理时间过长
- 网络连接超时
- 数据库慢查询
解决方案:
- 优化后端接口性能
- 增加超时时间配置
- 使用异步处理替代同步等待
状态码速查表
| 状态码 | 含义 | 常见场景 |
| 200 | 成功 | 正常请求 |
| 201 | 已创建 | POST创建资源 |
| 204 | 无内容 | DELETE/PUT成功 |
| 301 | 永久重定向 | 域名迁移、HTTPS跳转 |
| 302 | 临时重定向 | 登录跳转、维护 |
| 304 | 未修改 | 浏览器缓存 |
| 400 | 请求错误 | 参数格式错误 |
| 401 | 未认证 | 未登录、Token无效 |
| 403 | 禁止访问 | 权限不足 |
| 404 | 未找到 | 资源不存在 |
| 405 | 方法不允许 | HTTP方法错误 |
| 429 | 请求过多 | 限流 |
| 500 | 服务器错误 | 代码异常 |
| 502 | 网关错误 | 后端服务挂了 |
| 503 | 服务不可用 | 维护/过载 |
| 504 | 网关超时 | 后端响应超时 |
开发调试技巧
使用浏览器开发者工具
按F12打开开发者工具 → Network标签页 → 查看每个请求的状态码。状态码会以不同颜色区分:2xx绿色、3xx蓝色、4xx橙色、5xx红色。
命令行调试
# 查看响应头和状态码
curl -I https://example.com
# 只看状态码
curl -o /dev/null -s -w "%{http_code}\n" https://example.com
# 跟踪重定向链
curl -L -v https://example.com 2>&1 | grep "< HTTP"
用在线工具快速检测
使用 HTTP状态码查询工具 可以快速检测任意URL的响应状态码和响应头信息,适合排查重定向问题和接口状态。
SEO相关的状态码处理
301重定向与SEO
网站改版或换域名时,必须用301将旧URL重定向到新URL。301告诉搜索引擎"这个页面永久搬家了",会将旧页面的排名权重传递给新页面。
404页面处理
- 确保404页面返回真正的404状态码
- 不要返回200(软404),否则搜索引擎会索引无内容页面
- 在404页面提供搜索框和热门链接,帮助用户找到目标内容
- 定期检查Google Search Console中的404错误,修复有效链接
503维护页面
网站维护时返回503状态码,并设置Retry-After头。这样搜索引擎知道是临时不可用,不会从索引中删除页面。
总结
HTTP状态码是Web开发的通用语言。记住几个关键数字:
- 200:一切正常
- 301:永久搬家(SEO友好)
- 302:临时跳转
- 400:你发错了
- 401:没登录
- 403:没权限
- 404:找不到
- 500:服务器崩了
- 502:后端挂了
- 504:后端太慢
遇到状态码问题,用 HTTP状态码检测工具 快速诊断。配合 JSON格式化工具 排查接口请求问题。