**更新时间:** 2026-03-27
**阅读时间:** 约 15 分钟
---
HTTP 状态码(HTTP Status Code)是服务器对客户端请求的响应状态指示。当浏览器或其他客户端向服务器发送 HTTP 请求时,服务器会返回一个三位数字的状态码,表示请求的处理结果。
状态码由 IETF(互联网工程任务组)在 RFC 文档中定义,是 HTTP 协议的核心组成部分。理解这些状态码对于 Web 开发、API 调试、故障排查和 SEO 优化都至关重要。
---
HTTP 状态码分为五大类,由首位数字标识:
| 分类 | 范围 | 含义 | 说明 |
|------|------|------|------|
| 1xx | 100-199 | 信息性响应 | 请求已接收,继续处理 |
| 2xx | 200-299 | 成功 | 请求已成功处理 |
| 3xx | 300-399 | 重定向 | 需要进一步操作以完成请求 |
| 4xx | 400-499 | 客户端错误 | 请求包含错误或无法完成 |
| 5xx | 500-599 | 服务器端错误 | 服务器处理请求时发生错误 |
---
HTTP 状态码分类总览
flowchart LR
subgraph 1xx["1xx 信息性"]
I1["100 Continue
客户端继续"]
I2["101 Switching Protocols
协议切换"]
end
subgraph 2xx["2xx 成功"]
S1["200 OK"]
S2["201 Created
资源已创建"]
S3["204 No Content
成功无返回"]
end
subgraph 3xx["3xx 重定向"]
R1["301 永久移动"]
R2["302 临时移动"]
R3["304 Not Modified
缓存命中"]
end
subgraph 4xx["4xx 客户端错误"]
C1["400 Bad Request"]
C2["401 Unauthorized"]
C3["403 Forbidden"]
C4["404 Not Found"]
C5["429 Too Many Requests"]
end
subgraph 5xx["5xx 服务器错误"]
E1["500 Internal Error"]
E2["502 Bad Gateway"]
E3["503 Service Unavailable"]
E4["504 Gateway Timeout"]
end
1xx --> 2xx --> 3xx --> 4xx --> 5xx
style 1xx fill:#3498db,color:#fff
style 2xx fill:#27ae60,color:#fff
style 3xx fill:#f39c12,color:#fff
style 4xx fill:#e74c3c,color:#fff
style 5xx fill:#9b59b6,color:#fff
这类状态码表示请求已被接收,客户端应继续发送请求或等待服务器进一步指示。
**含义:** 服务器已收到请求头,客户端应继续发送请求体。
**使用场景:**
Expect: 100-continue 头的请求**示例:**
POST /upload HTTP/1.1
Host: example.com
Content-Length: 1000000
Expect: 100-continue
HTTP/1.1 100 Continue
[客户端继续发送请求体]
**含义:** 服务器同意切换协议。
**使用场景:**
**示例:**
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
**含义:** 服务器在最终响应之前返回一些响应头。
**使用场景:**
**示例:**
HTTP/1.1 103 Early Hints
Link: ; rel=preload; as=style
Link: ; rel=preload; as=script
HTTP/1.1 200 OK
...
---
这类状态码表示请求已成功被服务器接收、理解并处理。
**含义:** 请求成功。
**使用场景:**
**示例:**
GET /index.html HTTP/1.1
Host: example.com
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
...
**含义:** 请求成功并且服务器创建了新的资源。
**使用场景:**
**示例:**
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
{"name": "张三", "email": "zhangsan@example.com"}
HTTP/1.1 201 Created
Location: /api/users/123
Content-Type: application/json
{"id": 123, "name": "张三", "email": "zhangsan@example.com"}
**含义:** 请求已接受,但尚未处理完成。
**使用场景:**
**示例:**
POST /api/export HTTP/1.1
Host: example.com
HTTP/1.1 202 Accepted
Location: /api/export/status/abc123
{"status": "processing", "jobId": "abc123"}
**含义:** 请求成功,但响应体为空。
**使用场景:**
**示例:**
DELETE /api/users/123 HTTP/1.1
Host: example.com
HTTP/1.1 204 No Content
**含义:** 服务器成功处理了部分 GET 请求(范围请求)。
**使用场景:**
**示例:**
GET /video.mp4 HTTP/1.1
Host: example.com
Range: bytes=0-1048575
HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1048575/10485760
Content-Length: 1048576
[返回前 1MB 数据]
---
这类状态码表示客户端需要采取进一步的操作才能完成请求。
**含义:** 请求的资源已永久移动到新位置。
**使用场景:**
**示例:**
GET /old-page HTTP/1.1
Host: example.com
HTTP/1.1 301 Moved Permanently
Location: https://example.com/new-page
**含义:** 请求的资源临时移动到新位置。
**使用场景:**
**示例:**
GET /promo HTTP/1.1
Host: example.com
HTTP/1.1 302 Found
Location: /promo-2026
**含义:** 资源未修改,客户端可以使用缓存版本。
**使用场景:**
**示例:**
GET /style.css HTTP/1.1
Host: example.com
If-Modified-Since: Wed, 26 Mar 2026 10:00:00 GMT
HTTP/1.1 304 Not Modified
**含义:** 临时重定向,但要求客户端保持原请求方法不变。
**使用场景:**
**示例:**
POST /api/submit HTTP/1.1
Host: example.com
HTTP/1.1 307 Temporary Redirect
Location: /api/submit-new
**含义:** 永久重定向,但要求客户端保持原请求方法不变。
**使用场景:**
**示例:**
POST /old-api/submit HTTP/1.1
Host: example.com
HTTP/1.1 308 Permanent Redirect
Location: /new-api/submit
---
这类状态码表示请求包含错误或服务器无法处理该请求。
常见 4xx 错误排查流程
flowchart TD
A[收到 4xx 错误] --> B{状态码}
B -->|400| C["请求语法错误
检查请求格式、JSON结构"]
B -->|401| D{"认证方式"}
D -->|未认证| E["登录获取 Token"]
D -->|Token无效| F["Token 过期/无效
刷新或重新登录"]
B -->|403| G{"权限检查"}
G -->|角色不对| H["联系管理员提升权限"]
G -->|IP被封| I["检查 IP 黑名单"]
B -->|404| J["检查 URL 是否正确
资源是否被删除/迁移"]
B -->|429| K["请求频率过高
添加重试延迟/限流"]
C --> L[修正后重试]
E --> L
F --> L
H --> L
J --> L
K --> L
**含义:** 服务器无法理解请求,通常是因为语法错误。
**常见原因:**
**解决方案:**
**含义:** 请求需要用户认证。
**常见原因:**
**解决方案:**
Authorization: Bearer )**含义:** 服务器理解请求,但拒绝执行。
**常见原因:**
**解决方案:**
**含义:** 服务器找不到请求的资源。
**常见原因:**
**解决方案:**
**含义:** 请求方法不被允许。
**常见原因:**
**解决方案:**
**含义:** 服务器等待请求超时。
**常见原因:**
**解决方案:**
**含义:** 用户在给定时间内发送了太多请求。
**常见原因:**
**解决方案:**
---
stateDiagram-v2
[*] --> Healthy : 正常服务
Healthy --> LoadHigh : 负载过高
LoadHigh --> 503 : 服务不可用
Healthy --> 500 : 代码异常
Healthy --> 502 : 上游网关错误
Healthy --> 504 : 网关超时
503 --> Recovering : 自动恢复
Recovering --> Healthy
这类状态码表示服务器在处理请求时发生了错误。
**含义:** 服务器遇到意外情况,无法完成请求。
**常见原因:**
**解决方案:**
**含义:** 作为网关或代理的服务器从上游服务器收到无效响应。
**常见原因:**
**解决方案:**
**含义:** 服务器暂时无法处理请求。
**常见原因:**
**解决方案:**
**含义:** 作为网关或代理的服务器未及时从上游服务器收到响应。
**常见原因:**
**解决方案:**
---
| 状态码 | 名称 | 说明 |
|--------|------|------|
| 100 | Continue | 继续发送请求 |
| 101 | Switching Protocols | 切换协议 |
| 103 | Early Hints | 提前提示信息 |
| 状态码 | 名称 | 说明 |
|--------|------|------|
| 200 | OK | 请求成功 |
| 201 | Created | 资源已创建 |
| 202 | Accepted | 请求已接受 |
| 204 | No Content | 成功但无内容 |
| 206 | Partial Content | 部分内容 |
| 状态码 | 名称 | 说明 |
|--------|------|------|
| 301 | Moved Permanently | 永久移动 |
| 302 | Found | 临时移动 |
| 304 | Not Modified | 未修改(使用缓存) |
| 307 | Temporary Redirect | 临时重定向 |
| 308 | Permanent Redirect | 永久重定向 |
| 状态码 | 名称 | 说明 |
|--------|------|------|
| 400 | Bad Request | 请求错误 |
| 401 | Unauthorized | 未授权 |
| 403 | Forbidden | 禁止访问 |
| 404 | Not Found | 未找到 |
| 405 | Method Not Allowed | 方法不允许 |
| 408 | Request Timeout | 请求超时 |
| 429 | Too Many Requests | 请求过多 |
| 状态码 | 名称 | 说明 |
|--------|------|------|
| 500 | Internal Server Error | 服务器内部错误 |
| 502 | Bad Gateway | 网关错误 |
| 503 | Service Unavailable | 服务不可用 |
| 504 | Gateway Timeout | 网关超时 |
---
---
---
---
**最后更新:** 2026-03-27
**本文地址:** https://www.tongxinxieyi.com/articles/12-http-status-codes-complete-guide.html