---
title: "所有HTTP状态码含义及4xx/5xx错误解决方法"
description: "从1xx到5xx，一文看懂所有HTTP状态码的含义。"
pubDatetime: 2026-06-14
author: "Qihan"
tags: ["故障排查"]
category: "技术教程"
---

今天我们一起来聊聊常见的 HTTP 状态码及其含义，然后再针对 **4xx** 和 **5xx** 给出详细的解决方法。

## 一、所有 HTTP 状态码速查表

状态码分为五类，每类以不同数字开头。

### 1xx：信息响应（请求已接收，继续处理）

| 状态码 | 含义 | 说明 |
|--------|------|------|
| 100 Continue | 继续 | 服务器已收到请求头，客户端应继续发送请求体 |
| 101 Switching Protocols | 切换协议 | 服务器同意切换到客户端要求的协议（如 WebSocket） |
| 102 Processing | 处理中 | 服务器已收到并正在处理请求，但暂无响应（WebDAV） |

### 2xx：成功（请求被成功处理）

| 状态码 | 含义 | 说明 |
|--------|------|------|
| 200 OK | 成功 | 请求成功，返回所需资源（最理想的响应） |
| 201 Created | 已创建 | 请求成功且服务器创建了新资源（如 POST 提交后） |
| 202 Accepted | 已接受 | 请求已接受但尚未处理完成（用于异步任务） |
| 203 Non-Authoritative Information | 非授权信息 | 返回的元信息来自缓存或第三方，非原始服务器 |
| 204 No Content | 无内容 | 请求成功但无返回内容（常用于 DELETE 或表单提交） |
| 205 Reset Content | 重置内容 | 请求成功，要求客户端重置文档视图（如清空表单） |
| 206 Partial Content | 部分内容 | 服务器返回了部分资源（支持断点续传或分片下载） |

### 3xx：重定向（需要进一步操作）

| 状态码 | 含义 | 说明 |
|--------|------|------|
| 300 Multiple Choices | 多种选择 | 请求的资源有多个表示，用户可选择其一 |
| 301 Moved Permanently | 永久移动 | 资源已永久移动到新 URL，将来请求应使用新地址 |
| 302 Found | 临时移动 | 资源临时位于其他 URL，后续仍用原地址 |
| 303 See Other | 查看其他 | 应用 GET 方法重定向到另一个 URL（常用于 POST 后重定向） |
| 304 Not Modified | 未修改 | 资源未变化，可使用缓存版本（节省带宽） |
| 307 Temporary Redirect | 临时重定向 | 与 302 类似，但保持原始请求方法不变 |
| 308 Permanent Redirect | 永久重定向 | 与 301 类似，但保持原始请求方法不变 |

### 4xx：客户端错误（请求有问题）

| 状态码 | 含义 | 说明 |
|--------|------|------|
| 400 Bad Request | 错误请求 | 服务器无法理解请求语法（如参数错误、URL 过长） |
| 401 Unauthorized | 未授权 | 需要身份认证（未登录或凭证无效） |
| 403 Forbidden | 禁止访问 | 服务器理解请求但拒绝执行（登录了但无权限） |
| 404 Not Found | 未找到 | 请求的资源不存在（最常见） |
| 405 Method Not Allowed | 方法不允许 | 使用了不支持的 HTTP 方法（如用 GET 提交 POST 接口） |
| 406 Not Acceptable | 无法接受 | 服务器无法根据客户端 Accept 头生成响应 |
| 407 Proxy Authentication Required | 需要代理认证 | 需要通过代理服务器认证 |
| 408 Request Timeout | 请求超时 | 服务器等待客户端发送请求超时 |
| 409 Conflict | 冲突 | 请求与资源当前状态冲突（如编辑冲突） |
| 410 Gone | 已永久删除 | 资源已永久删除，且服务器不知道新地址 |
| 411 Length Required | 需要内容长度 | 缺少 Content-Length 头字段 |
| 412 Precondition Failed | 前置条件失败 | 请求头中的条件未满足 |
| 413 Payload Too Large | 负载过大 | 请求体超过服务器限制 |
| 414 URI Too Long | URI 过长 | 请求的 URL 过长 |
| 415 Unsupported Media Type | 不支持的媒体类型 | 请求的 Content-Type 不被服务器支持 |
| 416 Range Not Satisfiable | 范围不符合要求 | 请求的字节范围无效 |
| 417 Expectation Failed | 期望失败 | 服务器无法满足 Expect 头要求 |
| 418 I'm a teapot | 我是茶壶 | 愚人节彩蛋，表示“我不煮咖啡”（RFC 2324） |
| 422 Unprocessable Content | 无法处理内容 | 语义正确但内容错误（如验证失败） |
| 429 Too Many Requests | 请求过多 | 用户在给定时间内发送了过多请求（限流） |

### 5xx：服务器错误（服务器处理请求出错）

| 状态码 | 含义 | 说明 |
|--------|------|------|
| 500 Internal Server Error | 服务器内部错误 | 通用服务器错误，具体原因需查日志 |
| 501 Not Implemented | 未实现 | 服务器不支持请求的功能（如未实现的 HTTP 方法） |
| 502 Bad Gateway | 错误网关 | 网关或代理从上游服务器收到无效响应 |
| 503 Service Unavailable | 服务不可用 | 服务器过载或维护中，暂时无法处理请求 |
| 504 Gateway Timeout | 网关超时 | 网关或代理未及时从上游服务器收到响应 |
| 505 HTTP Version Not Supported | HTTP 版本不支持 | 服务器不支持请求的 HTTP 协议版本 |
| 507 Insufficient Storage | 存储不足 | 服务器无法存储完成请求所需的内容 |
| 508 Loop Detected | 检测到循环 | 服务器在处理请求时发现无限循环 |
| 510 Not Extended | 未扩展 | 请求需要进一步扩展才能完成 |
| 511 Network Authentication Required | 需要网络认证 | 需要认证才能访问网络（如公共 WiFi 登录页） |

> **备注**：实际工作中最常见的只有 200、301/302、304、400、401、403、404、429、500、502、503、504 等十几个。上面列出的是所有标准定义的状态码。

---

## 二、常见错误码详解及解决方法（4xx & 5xx）

下面针对普通用户和网站管理员，详细说明最常遇到的错误码的**原因**和**解决方法**。

### 1. 400 Bad Request —— 错误请求

**含义**：服务器无法理解你发送的请求，通常是请求语法有问题。

**常见原因**：
- 网址过长（超过浏览器或服务器限制）
- Cookie 太大
- 提交的表单包含非法字符
- 浏览器缓存损坏

**解决方法（普通用户）**：
- 清除浏览器缓存和 Cookie
- 检查网址是否包含乱码或特殊字符
- 尝试无痕模式或换一个浏览器
- 缩短 URL 参数（如果能手动简化）

**解决方法（网站管理员）**：
- 检查服务器日志，定位具体原因（如 `$http_referer` 或 `$query_string` 异常）
- 增大 `client_header_buffer_size`（Nginx）或 `LimitRequestLine`（Apache）
- 限制单个 Cookie 的大小

### 2. 401 Unauthorized —— 未授权

**含义**：请求需要用户认证，但未提供或认证失败。

**它与 403 的区别**：401 表示“还没登录”，403 表示“登录了但没权限”。

**解决方法（普通用户）**：
- 如果弹出登录框，输入正确的账号密码
- 清除浏览器中保存的该网站密码，重新登录
- 确认账号是否有效或未过期

**解决方法（网站管理员）**：
- 检查认证模块配置（如 Nginx 的 `auth_basic`、Apache 的 `mod_auth`）
- 确认后端会话验证逻辑无误
- 查看是否有 IP 白名单或地理位置限制

### 3. 403 Forbidden —— 禁止访问

**含义**：服务器理解请求，但拒绝执行。通常是权限不足。

**常见原因**：
- 需要登录但未登录（不同于 401，有些站点用 403 表示未登录）
- IP 被服务器列入黑名单
- 目录权限过于严格（如 Linux 目录无 `rx` 权限）
- 网站配置了防盗链或访问频率限制

**解决方法（普通用户）**：
- 刷新页面或清除浏览器缓存和 Cookie
- 检查是否已登录，如果没有，先登录
- 换个网络（如用手机热点）试试
- 联系网站管理员，告知你的 IP 地址

**解决方法（网站管理员）**：
- 检查 `.htaccess` 或 Nginx/Apache 的访问控制规则
- 确认文件/目录权限（目录 755，文件 644）
- 检查是否误启了 IP 黑名单或 User-Agent 过滤
- 查看 `error.log` 中的具体拒绝原因

### 4. 404 Not Found —— 未找到

**含义**：服务器找不到请求的资源（网页、图片、文件等）。**最常见**的错误码。

**常见原因**：
- 网址拼写错误
- 页面被删除且未设置重定向
- 链接已过期（活动页面、旧版文档）

**解决方法（普通用户）**：
- 检查网址是否输错（尤其是末尾斜杠、大小写）
- 删除网址从第一个斜杠往后的部分，回到网站首页重新导航
- 如果从搜索引擎点击进入，尝试搜索网站内其他关键词
- 使用 `site:example.com 关键词` 查找该网站是否还有相关内容

**解决方法（网站管理员）**：
- 配置自定义 404 页面，引导用户回到首页或搜索
- 对永久删除的页面设置 301 重定向到新页面
- 定期检查 Google Search Console 中的 404 错误，修复无效链接
- 使用工具（如 Xenu、Screaming Frog）扫描全站死链

### 5. 429 Too Many Requests —— 请求过多

**含义**：你在短时间内发送了太多请求，被服务器限流。

**常见原因**：
- 脚本或爬虫抓取过快
- 网站配置了 IP 频率限制
- 用户疯狂刷新页面（比如抢购、秒杀场景）

**解决方法（普通用户）**：
- 停止刷新，等待几分钟或几小时
- 如果使用代理或 VPN，尝试关闭后重试
- 检查是否有浏览器插件在频繁请求

**解决方法（网站管理员）**：
- 使用限流模块（如 Nginx 的 `limit_req`、Apache 的 `mod_ratelimit`）
- 配置合理的 `burst` 和 `nodelay` 参数
- 返回 429 时附带 `Retry-After` 头，告知客户端多久后重试

### 6. 500 Internal Server Error —— 服务器内部错误

**含义**：服务器遇到意外情况，无法完成请求。这是最通用的服务器错误，具体原因多样。

**常见原因**：
- 代码语法错误（如 PHP 缺少分号、Python 缩进错误）
- 文件权限不正确（如无法写入临时目录或日志文件）
- 服务器内存不足
- .htaccess 规则错误（Apache）
- 依赖服务未启动（如数据库、Redis）

**解决方法（普通用户）**：
- 刷新页面（有时只是瞬时过载）
- 等几分钟再试，可能服务器正在重启
- 清除浏览器缓存和 Cookie
- 联系网站管理员，附上错误发生时间和操作步骤

**解决方法（网站管理员）**：
- **第一要务**：查看服务器错误日志（`/var/log/nginx/error.log`、`/var/log/apache2/error.log`、`/var/log/php_errors.log`）
- 检查最近是否修改了 `.htaccess`、配置文件或上传了新代码
- 增加 PHP 内存限制（`memory_limit`）或执行时间（`max_execution_time`）
- 检查文件和目录所有权（尤其确保 Web 用户如 `www-data` 有读写权限）
- 在开发环境开启详细错误显示（`display_errors = On`）定位具体代码行号，修复合入生产

### 7. 502 Bad Gateway —— 错误网关

**含义**：作为网关或代理的服务器（如 Nginx），从上游服务器（如 PHP-FPM、Tomcat）收到了无效响应。

**常见原因**：
- 后端服务挂了或未启动（PHP-FPM、Node.js、Java 应用）
- 网关和后端之间连接超时
- 防火墙拦截了通信端口
- 后端服务响应时间过长（如慢 SQL）

**解决方法（普通用户）**：
- 刷新几次（有时后端会自愈）
- 等几分钟，管理员可能正在重启服务
- 联系网站管理员

**解决方法（网站管理员）**：
- 检查后端服务状态：`systemctl status php8.1-fpm`、`ps aux | grep node`
- 重启后端服务：`systemctl restart php8.1-fpm`
- 检查 Nginx/Apache 的 `upstream` 配置是否指向正确的 IP 和端口
- 查看后端服务的日志（如 PHP-FPM 的 `error_log`、Tomcat 的 `catalina.out`）
- 增加超时时间：`proxy_read_timeout` 或 `fastcgi_read_timeout` 适当增大（如 300s）
- 检查防火墙：`telnet 127.0.0.1 9000`（测试 PHP-FPM 端口是否可达）

### 8. 503 Service Unavailable —— 服务不可用

**含义**：服务器暂时无法处理请求（通常是由于过载或维护中）。与 500 的区别：503 通常是预期的、临时的。

**常见原因**：
- 流量激增，超过服务器处理能力
- 正在进行计划内维护
- 应用程序池耗尽了工作进程（如 PHP 子进程用完）
- 被 DDoS 攻击或主动限流

**解决方法（普通用户）**：
- 过几分钟再试（最佳策略）
- 刷新页面（某些瞬时 503 可恢复）
- 大型网站可查看其官方社交媒体是否有维护公告

**解决方法（网站管理员）**：
- 检查服务器负载、带宽和内存使用情况（`top`、`htop`、`free -m`）
- 如果是限流配置（如 Nginx 的 `limit_req` 或 `limit_conn`），可临时调高阈值
- 增加工作进程或 PHP-FPM 的 `pm.max_children` 值
- 考虑启用 CDN 或负载均衡分担压力
- 对于计划内维护，返回 503 时应带上 `Retry-After` 头，并配置一个友好的维护页面

### 9. 504 Gateway Timeout —— 网关超时

**含义**：作为网关的服务器在规定时间内没有收到上游服务器的响应。与 502 类似，502 是收到了无效响应，504 是根本没收到。

**常见原因**：
- 后端服务执行时间过长（复杂数据库查询、调用外部 API 超时）
- 网关与后端之间的网络延迟很高
- 后端服务器负载过高，请求排队等待

**解决方法（普通用户）**：
- 刷新页面（可能只是偶尔超时）
- 尝试在非高峰期访问
- 联系网站管理员

**解决方法（网站管理员）**：
- 增加网关的超时设置：`proxy_read_timeout 300s;`、`fastcgi_read_timeout 300s;`
- 优化后端代码和数据库查询（加索引、缓存结果、分解复杂查询）
- 检查后端服务器的慢查询日志（MySQL 的 `slow_query_log`）
- 将耗时操作改为异步处理（如使用消息队列、后台任务）
- 检查网络延迟：`ping` 或 `traceroute` 到后端服务器

## 三、查找错误原因的小技巧

**普通用户**：如果遇到 4xx，先检查自己的操作；遇到 5xx，稍等再试，仍不行就联系网站管理员。可以使用浏览器的 **开发者工具**（F12 → Network 标签）查看具体状态码和响应信息。

**网站管理员**：
- 查看日志命令：`tail -f /var/log/nginx/error.log`
- 在线测试工具：`curl -I https://你的域名` 只返回状态头
- 配置监控告警：UptimeRobot、Statuscake 或 Prometheus + Alertmanager

希望这份速查表和解决方法能帮你少走弯路。祝你的网站永远 **200 OK**！
