Files
MyBlog-Next/src/content/posts/所有HTTP状态码含义及常见错误码的解决方法.mdx
T

295 lines
14 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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**!