HTTP 状态码速查
这里汇总接口和 CDN 里最常见的状态码,极少用的实验码未收录。
| 码 | 名称 | 含义 |
|---|---|---|
| 200 | OK | Success with body |
| 201 | Created | Resource created |
| 204 | No Content | Success, empty body |
| 301 | Moved Permanently | Permanent redirect |
| 302 | Found | Temporary redirect |
| 304 | Not Modified | Use cached copy |
| 400 | Bad Request | Client request invalid |
| 401 | Unauthorized | Auth required / failed |
| 403 | Forbidden | Authenticated but denied |
| 404 | Not Found | No such resource |
| 405 | Method Not Allowed | Wrong HTTP method |
| 408 | Request Timeout | Client too slow |
| 409 | Conflict | State conflict |
| 410 | Gone | Permanently removed |
| 422 | Unprocessable Entity | Semantics invalid |
| 429 | Too Many Requests | Rate limited |
| 500 | Internal Server Error | Server fault |
| 502 | Bad Gateway | Upstream invalid |
| 503 | Service Unavailable | Overloaded / down |
| 504 | Gateway Timeout | Upstream timeout |
说明
- 401 与 403:未通过认证,或已登录但没有权限。
- 源站连不上时,CDN 也可能直接返回 5xx。
状态码的五种类型
首位数字告诉你责任人以及大致发生了什么。1xx 是信息性响应,客户端很少见到。2xx 表示成功——200 是有内容的 OK,204 是无内容的 OK,206 表示部分下载。3xx 表示资源在别处。4xx 表示请求本身有误:语法错误、缺少凭证或触发限流。5xx 表示请求没问题但服务器失败了。只看首位数字,你就知道该修复客户端还是向服务端升级。
选择合适的重定向
301 和 308 都表示永久重定向;302 和 307 都表示临时重定向。区别在于如何处理请求方法:301 和 302 历史上允许客户端将 POST 转为 GET,而 307 和 308 会保留原始方法和请求体,这对 API 和表单提交很重要。对于真正永久迁移的 URL 使用 301,对于维护页面或 A/B 测试等临时路由使用 302 或 307。注意重定向链——每次额外跳转都会增加延迟并损失链接权重,因此请直接重定向到最终目标地址。
排查 4xx 错误
401 表示缺少或验证失败的身份认证,发送有效凭证即可解决;403 表示请求已理解并通过身份验证但被禁止,用相同凭证重试无效。404 表示资源不存在;410 表示资源曾经存在但已被有意删除。429 表示触达限流阈值,应退避并重试,同时遵守 Retry-After 头。400 通常表示输入格式错误,405 表示该方法不适用于该 URL,422 表示语法正确但内容校验失败。
解读 5xx 状态码
500 是通用内部错误;502 Bad Gateway 表示上游服务器返回了不可用的响应;503 表示服务暂时不可用或过载;504 表示上游超时。这些是服务端的问题而非调用方的问题,因此解决方案是退避重试、检查上游健康状况或削减负载。CDN 可能代表无法访问的源站在发出 502、503 或 504,这就是同一个错误可能来自两个截然不同地方的原因——查看 server 和 cache-status 头以确定是哪个来源。
状态码的实际应用:API 与缓存
两个日常使用场景值得留意。首先是缓存:带 Cache-Control 头的 200 响应可以被存储,304 Not Modified 告诉客户端复用本地副本,而 5xx 不应被缓存。其次是 API:创建资源的 POST 请求应返回 201 并附带 Location 头,DELETE 通常返回 204,未产生变化的 PATCH 可能返回 200 或 204。规范的客户端会先按大类(2xx、4xx、5xx)分支处理,然后再根据具体状态码细化,这使得重试和退避逻辑简单而可预测。
常见问题
- HTTP 403 是什么意思?
- 403 表示服务器已理解(通常已认证)请求,但拒绝授权访问该资源。与 401 不同,重新登录也无法解决。
- HTTP 301 和 302 重定向有什么区别?
- 301 表示资源永久迁移,客户端和搜索引擎此后应使用新地址;302 是临时重定向,原地址仍然有效。
- HTTP 429 是什么意思?怎么解决?
- 429 表示请求过于频繁,触发了限流。应降低请求频率,并遵循服务器返回的 Retry-After 响应头。