1xx 信息类响应
1xx 状态码表示信息类响应,表示请求已被接收,正在处理中。
100 Continue
客户端在发送请求体之前,在请求中发送 Expect: 100-continue 请求头。此时服务器会检查请求头是否有问题:
- 如果没有问题,返回
100 Continue状态码 - 如果有问题,返回
417 Expectation Failed状态码
100 状态码只能通过 curl 方式测试,无法在浏览器控制台中查看
curl -I -H "expect: 100-continue" https://github.com
curl -I -H "expect: 100-continue" https://zhihu.com
101 Switching Protocol
在切换协议时用到 101 状态码,表示服务器已理解客户端的请求,并将通过 Upgrade 头消息通知客户端采用不同的协议来完成这个请求。
例如从 HTTP 切换到 WebSocket 协议时就会使用 101 状态码,对应 Upgrade 和 Connection 响应头。
2xx 成功类响应
2xx 状态码表示请求成功。
200 OK
表示请求成功,服务器成功返回请求的数据。
201 Created
一般用于 POST 请求,代表服务器资源创建成功。例如在 GitHub 中创建一个 issue 会返回 201 状态码。
204 No Content
表示服务器成功处理了请求,但没有返回任何内容。常见场景包括:
- 修改资源的某个状态,无需响应体
DELETE或OPTIONS请求- 埋点 API
206 Partial Content
当客户端指定 Range 范围请求头时,服务器将返回部分资源。此时状态码为 206,常用于视频分片加载(如哔哩哔哩)。
# 请求头
Range: bytes=1-20
# 响应头
Content-Range: bytes 1-20/33223
3xx 重定向类响应
3xx 状态码表示需要客户端采取进一步的操作才能完成请求。
301 Moved Permanently
永久重定向。表示请求的资源已被永久移动到新位置。
302 Found
临时重定向。表示请求的资源临时移动到新位置。
307 Temporary Redirect
临时重定向。与 302 类似,但在处理请求方法时保持不变。
308 Permanent Redirect
永久重定向。与 301 类似,但在处理请求方法时保持不变。
4xx 客户端错误
4xx 状态码表示客户端错误,将在控制台网络列表中以红色醒目方式标明,方便调试 Bug。
建议参考飞书和 GitHub 的状态码规范,而不是统一返回 200 状态码:
- https://docs.github.com/en/rest/issues/issues?apiVersion=2026-03-10#create-an-issue--status-codes
- https://open.feishu.cn/document/server-docs/calendar-v4/calendar/unsubscribe#c98c3220
400 Bad Request
服务器无法理解客户端的请求:
- 服务器无法理解的参数
- 入参校验失败
401 Unauthorized
未授权,访问需要权限的资源时没有提供有效的凭证。
403 Forbidden
禁止访问。服务器理解请求但拒绝执行,不管客户端是否有凭证。
404 Not Found
未找到资源,请求的资源不存在。
413 Payload Too Large
请求体过大,服务器无法处理。
429 Too Many Requests
请求过多,在调用第三方服务时达到了限流规则。
5xx 服务器错误
5xx 状态码表示服务器错误,服务器在处理请求时发生了错误。
500 Internal Server Error
服务器内部错误,服务器遇到了意外情况,无法完成请求。
502 Bad Gateway
网关错误,上游服务器返回了无效的响应。
503 Service Unavailable
服务不可用,服务器当前无法处理请求(可能由于过载或维护)。
504 Gateway Timeout
网关超时,服务器作为网关或代理,未及时从上游服务器获得响应。
502 vs 504
这两个状态码看起来相似,但含义不同:
- Gateway (proxy):反向代理或网关层,通常由 Nginx 扮演
- Application:应用层服务,作为 proxy 层的上游服务,通常由 Go、Java、Node 等语言编写的服务器代码实现
区别如下:
502 Bad Gateway:应用层服务挂了或配置有问题504 Gateway Timeout:应用层服务超时,超过了 Gateway 配置的超时时间。例如查询数据库耗时三分钟,超过了 Nginx 配置的超时时间