HTTP状态码(HTTP Status Code)是服务器对客户端请求的响应状态标识,由3位数字组成,分为五大类:
1. 1xx(信息类):临时响应,服务器已接收请求,正在处理(极少使用)
2. 2xx(成功类):请求已成功接收、处理并返回
3. 3xx(重定向类):需要客户端进一步操作(如跳转至新地址)
4. 4xx(客户端错误):客户端请求有错误(如资源不存在、权限不足)
5. 5xx(服务器错误):服务器处理请求时发生错误
核心规则:状态码的第一位数字代表类别,后两位仅用于细分状态(无统一含义)。
| 状态码 | 状态名称 | 说明 | 常见场景 |
|---|---|---|---|
| 100 | Continue(继续) | 服务器已接收请求头,客户端可继续发送请求体 | 大文件上传、POST请求分阶段发送 |
| 101 | Switching Protocols(切换协议) | 服务器同意客户端的协议切换请求(如HTTP→WebSocket) | WebSocket连接建立、实时通信场景 |
| 102 | Processing(处理中) | 服务器正在处理请求,尚未返回结果(WebDAV专用) | 大型WebDAV操作(如文件批量处理) |
| 状态码 | 状态名称 | 说明 | 常见场景 |
|---|---|---|---|
| 200 | OK(成功) | 请求已成功处理,返回请求的资源/数据 | GET请求获取资源、POST请求返回处理结果 |
| 201 | Created(已创建) | 请求成功并创建了新的资源(如新增数据) | POST请求创建用户、新增订单、上传文件 |
| 202 | Accepted(已接受) | 服务器已接收请求,但尚未处理完成 | 异步任务处理(如邮件发送、数据批量导入) |
| 204 | No Content(无内容) | 请求成功处理,但返回的响应体为空 | DELETE请求删除资源、PUT请求更新资源(无需返回数据) |
| 206 | Partial Content(部分内容) | 服务器仅返回请求资源的部分内容 | 视频/音频分片播放、大文件断点续传 |
| 状态码 | 状态名称 | 说明 | 常见场景 |
|---|---|---|---|
| 301 | Moved Permanently(永久重定向) | 请求的资源已永久移动到新地址,浏览器会缓存该重定向 | 网站域名更换、页面永久迁移 |
| 302 | Found(临时重定向) | 请求的资源临时移动到新地址,浏览器不会缓存 | 用户登录后跳转、临时页面维护 |
| 304 | Not Modified(未修改) | 客户端缓存的资源未过期,无需重新下载 | 静态资源(CSS/JS/图片)的缓存优化 |
| 307 | Temporary Redirect(临时重定向) | 与302类似,但严格保留原请求方法(如POST) | 需要保留请求方法的临时跳转(如表单提交后跳转) |
| 308 | Permanent Redirect(永久重定向) | 与301类似,但严格保留原请求方法(如POST) | 需要保留请求方法的永久跳转 |
| 状态码 | 状态名称 | 说明 | 常见场景 |
|---|---|---|---|
| 400 | Bad Request(错误请求) | 服务器无法理解客户端的请求(请求参数/格式错误) | 参数缺失、JSON格式错误、请求头不合法 |
| 401 | Unauthorized(未授权) | 请求需要用户身份验证(未登录或token失效) | 访问需要登录的接口、token过期/无效 |
| 403 | Forbidden(禁止访问) | 客户端已认证,但无权限访问该资源 | 普通用户访问管理员接口、访问受保护的文件 |
| 404 | Not Found(未找到) | 请求的资源在服务器上不存在 | 访问不存在的页面、接口路径错误 |
| 405 | Method Not Allowed(方法不允许) | 客户端使用的请求方法(如POST)不被该资源支持 | GET接口使用POST请求、DELETE接口使用PUT请求 |
| 408 | Request Timeout(请求超时) | 客户端请求耗时过长,服务器终止处理 | 网络卡顿、客户端请求发送过慢 |
| 409 | Conflict(冲突) | 请求与服务器当前资源状态冲突 | 创建重复的用户(用户名已存在)、并发更新数据 |
| 413 | Payload Too Large(请求体过大) | 客户端发送的请求体超过服务器限制 | 上传文件大小超过服务器配置、POST数据量过大 |
| 429 | Too Many Requests(请求过于频繁) | 客户端在短时间内发送了过多请求 | 接口限流、防爬虫机制触发 |
| 状态码 | 状态名称 | 说明 | 常见场景 |
|---|---|---|---|
| 500 | Internal Server Error(内部服务器错误) | 服务器处理请求时发生未知错误 | 代码BUG、数据库连接失败、服务器配置错误 |
| 502 | Bad Gateway(网关错误) | 服务器作为网关/代理,收到上游服务器的无效响应 | Nginx反向代理时后端服务宕机、接口超时 |
| 503 | Service Unavailable(服务不可用) | 服务器暂时无法处理请求(如维护、过载) | 服务器重启、流量峰值过载、服务维护 |
| 504 | Gateway Timeout(网关超时) | 服务器作为网关/代理,等待上游服务器响应超时 | 后端接口响应过慢、数据库查询耗时过长 |
| 505 | HTTP Version Not Supported(HTTP版本不支持) | 服务器不支持客户端使用的HTTP协议版本 | 客户端使用HTTP/2.0但服务器仅支持HTTP/1.1 |
1. 301与302的区别:301是永久重定向(浏览器缓存跳转记录),302是临时重定向(不缓存),SEO优化中301更友好。
2. 304的实现:依赖请求头的If-Modified-Since(时间)或If-None-Match(ETag),服务器对比后返回304。
3. 401与403的区别:401是未认证(需要登录),403是已认证但无权限(拒绝访问)。
4. 502与504的区别:502是上游服务器返回无效响应(如宕机),504是上游服务器响应超时。
5. 状态码自定义:部分服务会使用非标准状态码(如499表示客户端中断请求),仅在特定场景下生效。