今天我们一起来聊聊常见的 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!