HTTP 状态码查询

HTTP 状态码完整参考,包含含义、使用场景和常见原因

1xx 信息(2)

100 Continue

服务器已收到请求头,客户端应继续发送请求体

状态码: 100 Continue

含义: 服务器已接收请求头部分,客户端可以继续发送请求体。
常见于: 大文件上传前的预检。

101 Switching Protocols

服务器同意切换协议(如 WebSocket)

状态码: 101 Switching Protocols

含义: 服务器同意客户端的协议切换请求。
常见于: HTTP 升级为 WebSocket 连接。

响应头示例:
Upgrade: websocket
Connection: Upgrade

2xx 成功(3)

200 OK

请求成功,服务器返回了请求的数据

状态码: 200 OK

含义: 请求成功。

GET  → 返回请求的资源
POST → 返回处理结果
PUT  → 返回更新后的资源

201 Created

请求成功,服务器创建了新资源

状态码: 201 Created

含义: 资源创建成功。
常见于: POST 请求创建新用户、新文章等。

响应通常包含:
Location: /api/users/123  (新资源的URL)

204 No Content

请求成功,但没有返回内容

状态码: 204 No Content

含义: 请求成功处理,但不需要返回内容。
常见于: DELETE 删除成功、PUT 更新成功。

3xx 重定向(5)

301 Moved Permanently

资源已永久移动到新 URL

状态码: 301 Moved Permanently

含义: 资源已永久转移,以后都用新 URL。
搜索引擎会更新索引到新 URL。

响应头:
Location: https://new-domain.com/page

Nginx 配置:
return 301 https://new-domain.com$request_uri;

302 Found

资源临时移动到新 URL

状态码: 302 Found

含义: 资源临时重定向,下次还用原 URL。
常见于: 登录后跳转、临时维护。

响应头:
Location: /login

304 Not Modified

资源未修改,使用浏览器缓存

状态码: 304 Not Modified

含义: 资源没有变化,直接用本地缓存。
节省带宽,加快页面加载。

相关请求头:
If-Modified-Since: Wed, 21 Oct 2024 07:28:00 GMT
If-None-Match: "33a64df551425fcc55e4d42a148795d9"

307 Temporary Redirect

临时重定向,保持原请求方法

状态码: 307 Temporary Redirect

含义: 临时重定向(保持 POST/PUT 等方法不变)。
与 302 的区别: 307 保证不会把 POST 改成 GET。

308 Permanent Redirect

永久重定向,保持原请求方法

状态码: 308 Permanent Redirect

含义: 永久重定向(保持原始请求方法)。
与 301 的区别: 308 保证不会把 POST 改成 GET。

4xx 客户端错误(9)

400 Bad Request

请求格式错误,服务器无法理解

状态码: 400 Bad Request

含义: 请求有语法错误或参数无效。

常见原因:
- JSON 格式错误
- 缺少必填参数
- 参数类型不对
- URL 格式错误

401 Unauthorized

未认证,需要登录

状态码: 401 Unauthorized

含义: 请求需要身份认证。

常见原因:
- 未携带 Token
- Token 已过期
- Token 无效

响应头通常包含:
WWW-Authenticate: Bearer

403 Forbidden

已认证但没有权限访问

状态码: 403 Forbidden

含义: 服务器理解请求,但拒绝执行。

401 vs 403:
401 = 你是谁?(未登录)
403 = 我知道你是谁,但你没权限。

404 Not Found

请求的资源不存在

状态码: 404 Not Found

含义: 服务器找不到请求的资源。

常见原因:
- URL 路径拼错
- 资源已被删除
- 路由未定义

405 Method Not Allowed

请求方法不被允许

状态码: 405 Method Not Allowed

含义: 该 URL 不支持当前请求方法。
例如: 对只支持 GET 的接口发了 POST。

响应头:
Allow: GET, HEAD

409 Conflict

请求与当前资源状态冲突

状态码: 409 Conflict

含义: 请求与服务器当前状态冲突。
常见于: 用户名已存在、版本冲突。

413 Payload Too Large

请求体超出服务器限制

状态码: 413 Payload Too Large

含义: 请求体太大,超过服务器限制。
常见于: 上传大文件。

Nginx 调大限制:
client_max_body_size 100M;

422 Unprocessable Entity

请求格式正确但语义错误

状态码: 422 Unprocessable Entity

含义: 请求语法正确,但内容无法被处理。
常见于: 表单验证失败(邮箱格式不对等)。

与 400 的区别:
400 = 格式都不对
422 = 格式对了但内容不对

429 Too Many Requests

请求频率超过限制

状态码: 429 Too Many Requests

含义: 客户端发送请求过多(限流)。

响应头通常包含:
Retry-After: 60  (60秒后重试)

5xx 服务器错误(4)

500 Internal Server Error

服务器内部错误

状态码: 500 Internal Server Error

含义: 服务器遇到未知错误,无法完成请求。

常见原因:
- 代码抛出未捕获的异常
- 数据库连接失败
- 空指针异常
- 配置文件错误

502 Bad Gateway

网关/代理从上游收到无效响应

状态码: 502 Bad Gateway

含义: 反向代理收到上游服务器的无效响应。

常见原因:
- 后端服务挂了
- 后端服务正在重启
- Nginx 代理配置错误

503 Service Unavailable

服务暂时不可用

状态码: 503 Service Unavailable

含义: 服务器暂时无法处理请求。

常见原因:
- 服务器过载
- 正在维护
- 数据库连接池耗尽

响应头:
Retry-After: 300

504 Gateway Timeout

网关/代理等待上游响应超时

状态码: 504 Gateway Timeout

含义: 反向代理等待上游服务器响应超时。

常见原因:
- 后端处理时间太长
- 网络问题

Nginx 调大超时:
proxy_read_timeout 300s;

相关工具