HTTP 状态码是什么?
当我们在浏览器中访问网页,或使用 App 请求一个网络资源时,背后其实发生了一个 “请求 ↔ 响应” 的过程:
- 客户端(比如你的浏览器)发出一个 “请求”。
- 服务器接收到请求并处理,然后返回一个 “响应”。
在服务器返回的响应中,有一个非常重要的 3 位数字,这就是 “HTTP 状态码”。它的作用是:告诉客户端这个请求处理得怎么样了。
小伙伴们可以简单地把它理解为服务端对你说的一句 “简短回复”,比如:
- “没问题,我找到了!”(200)
- “你这东西我没有!”(404)
- “服务器出问题了,别催我了…”(500)
对于 HTTP 状态码来说,我们可以根据它的 “第一位数字” 进行分类,主要分为以下 5 种(如下表所示)。
| 类别 | 说明 |
|---|---|
| 1xx(信息响应) | 请求已收到,继续处理即可 |
| 2xx(成功响应) | 请求成功 |
| 3xx(重定向) | 需要进一步操作(跳转) |
| 4xx(客户端错误) | 请求有问题(比如写错地址、权限不足) |
| 5xx(服务器错误) | 服务器处理时出错了 |
其中,常见的 HTTP 状态码如下表所示。
| 类别 | 状态码 | 说明 |
|---|---|---|
| 1xx(信息响应) | 100 | 继续 |
| 101 | 切换协议 | |
| 2xx(成功响应) | 200 | 成功 |
| 201 | 已创建 | |
| 204 | 无内容 | |
| 206 | 部分内容 | |
| 3xx(重定向) | 301 | 永久重定向 |
| 302 | 临时重定向 | |
| 304 | 未修改 | |
| 4xx(客户端错误) | 401 | 未授权 |
| 403 | 禁止 | |
| 404 | 未找到 | |
| 405 | 方法不允许 | |
| 408 | 请求超时 | |
| 429 | 请求过多 | |
| 5xx(服务端错误) | 500 | 服务器内部错误 |
| 502 | 错误网关 | |
| 503 | 服务不可用 | |
| 504 | 网关超时 |
常见的 HTTP 状态码
虽然HTTP 状态码有很多,但在开发中常用的就下面这几个,我们掌握它们就够了。
1. 1xx(信息响应)
1xx 状态码比较少见,一般用于通知客户端。
- 100 Continue(继续):表示一切正常,客户端可以继续发送剩下的请求内容。
- 101 Switching Protocols(切换协议):服务器同意切换通信协议,比如从 HTTP 切换到 WebSocket。
2. 2xx(成功响应)
2xx 状态码是最常见最友好的状态码,表示请求成功完成、一切顺利。
- 200 OK(成功):最常见的状态码,请求成功并返回了数据。
- 201 Created(已创建):服务器成功创建了一个资源,比如上传文件或提交表单成功。
- 204 No Content(无内容):请求成功,但服务器没有返回内容(比如删除操作)。
- 206 Partial Content(部分内容):请求了一部分数据(比如文件的一部分),服务器也只返回这一部分。
3. 3xx(重定向)
3xx 状态码表示要完成请求,需要进一步的操作。通常,这些状态码会附带一个 Location 头,指示客户端需要重定向到的新 URL 。
- 301 Moved Permanently(永久重定向):资源永久移动到了新地址,客户端应使用新地址。
- 302 Found(临时重定向):资源临时移动,以后可能还会回来。
- 304 Not Modified(未修改):客户端缓存的资源是最新的,服务器无需再次发送。
4. 4xx(客户端错误)
4xx 状态码表示请求本身有问题,错误大多出在客户端。
- 401 Unauthorized(未授权):表示没有提供正确的身份凭证(如登录令牌或密码)。常见情况包括:
- 没有登录,或者凭证缺失。
- 登录了,但凭证过期或错误。
- 登录成功,但权限不足。
- 403 Forbidden(禁止):你已经登录了,但依然无权访问这个资源。比如一个普通用户想要访问 VIP 用户的页面。
- 404 Not Found(未找到):这是最常见的错误状态码之一,表示请求的资源在服务器上找不到。比如我们访问一个不存在的页面,就会出现 404。
- 405 Method Not Allowed(方法不允许):请求方法不对,比如你使用 GET 方法请求了一个只能 POST 的接口。
- 408 Request Timeout(请求超时):服务器等待客户端发送请求的时间过长。
- 429 Too Many Requests(请求过多):请求次数太多,被限流了(比如 API 调用过于频繁)。
注意:401 与 403 是不一样的。其中,401 表示身份验证失败(未登录或凭证无效)。而 403 表示已验证身份,但无权限访问。
5. 5xx(服务器错误)
5xx 状态码表示服务器遇到了问题,锅在它不在你。
- 500 Internal Server Error(服务器内部错误):这是最常见的服务器端错误,表示服务器遇到了一个意外的情况(往往是后端代码自身出了问题),阻止它完成请求。
- 502 Bad Gateway(错误网关):服务器在作为中转(网关或代理)时,收不到上游服务器的正常响应。常见原因包括:
- 上游服务器故障:目标服务器宕机、超载或无法响应。
- 网络问题:网关与上游服务器之间的连接中断或超时。
- 配置错误:代理服务器(如 Nginx、Cloudflare)配置不当。
- 防火墙或安全策略:请求被上游服务器的安全机制拦截。
- 503 Service Unavailable(服务不可用):服务器目前无法处理请求,通常是由于服务器过载或停机维护。不过这通常是暂时的。
- 504 Gateway Timeout(网关超时):作为网关或代理的服务器,没有及时从上游服务器接收到响应。
