HTTP 状态码分类整理(含协议说明版)

HTTP 状态码分类整理(含协议说明版)

HTTP 状态码是服务器对客户端请求的响应状态标识,共分为 5 大类(1xx-5xx),核心遵循「分类明确、场景具象、协议关联、易记实用」原则整理,适合开发调试、接口对接、面试备考等场景。

核心分类逻辑

  • 1xx:信息提示 → 请求已接收,需继续处理(少见,多关联HTTP/1.1及以上协议)

  • 2xx:成功响应 → 请求已被正常处理(适配HTTP全协议版本、WebSocket握手后确认等)

  • 3xx:重定向 → 需客户端进一步操作才能完成请求(主要关联HTTP/1.0及以上协议,WebSocket无此场景)

  • 4xx:客户端错误 → 请求存在语法错误或无法被服务器处理(客户端问题,适配HTTP全协议、WebSocket握手阶段等)

  • 5xx:服务器错误 → 服务器处理请求时发生内部错误(服务器问题,适配HTTP全协议、WebSocket握手阶段等)


一、1xx 信息状态码(临时响应)

用于告知客户端「请求已收到,正在处理」,通常由服务器内部使用,客户端无需手动处理,主要关联 HTTP/1.1 及以上协议(HTTP/1.0 不支持1xx状态码)。

状态码 名称 核心含义 关联协议 应用场景
100 Continue(继续) 服务器已接收请求头,客户端可发送请求体 HTTP/1.1、WebSocket(握手前置) 1. 大文件上传、分块请求(如 POST 大表单);2. WebSocket 握手时,客户端发送带 Upgrade 头的请求后,服务器返回100表示已接收请求头,允许客户端继续完成握手流程
101 Switching Protocols(协议切换) 服务器同意客户端切换协议 HTTP/1.1、WebSocket(核心握手响应) 最典型场景为 WebSocket 协议切换:客户端发送 HTTP 请求并携带 Upgrade: websocket 头,服务器返回101表示同意切换至 WebSocket 协议,后续通信使用 WebSocket 协议而非 HTTP
102 Processing(处理中) 服务器正在处理请求,需等待 HTTP/1.1、WebDAV 扩展协议 WebDAV 协议下的复杂文件操作(如批量上传、文件夹创建),告知客户端服务器仍在处理,避免客户端超时重试

二、2xx 成功状态码(请求处理完成)

核心标识「客户端请求合法,服务器已正常响应」,是开发中最理想的响应状态,适配 HTTP 全协议版本、WebSocket 握手后确认(部分场景) 等。

状态码 名称 核心含义 关联协议 应用场景
200 OK(成功) 请求完全成功,响应体包含所需数据 HTTP/1.0 及以上、HTTP/2、HTTP/3 绝大多数 GET/POST 请求(如查询数据、提交表单成功);HTTP 协议下的接口调用成功的默认返回状态
201 Created(已创建) 请求成功且服务器创建了新资源 HTTP/1.0 及以上、RESTful API 规范 POST 新增资源(如创建用户、新增订单);RESTful 协议规范中,新增资源必须返回201,且响应头携带 Location 指向新资源地址
202 Accepted(已接受) 请求已接收,但尚未处理完成(异步处理) HTTP/1.1 及以上、异步 API 协议 耗时操作(如批量导出数据、异步任务提交);常见于微服务架构中,服务接收请求后转发至异步队列,返回202告知客户端「已受理,后续需自行查询结果」
204 No Content(无内容) 请求成功,但响应体无数据 HTTP/1.0 及以上、RESTful API 规范 DELETE 请求(删除资源成功)、PUT 更新资源(无需返回内容);RESTful 协议中,删除资源成功且无需返回信息时用204,避免返回空响应体浪费带宽
206 Partial Content(部分内容) 客户端请求部分资源,服务器成功返回 HTTP/1.1 及以上、HTTP 范围请求协议 断点续传、大文件分片下载(如视频分段加载、迅雷等下载工具的多线程下载);客户端通过 Range 头指定资源范围,服务器返回对应部分内容并携带206状态码

三、3xx 重定向状态码(需客户端进一步操作)

服务器无法直接返回目标资源,需客户端通过新地址或调整请求方式继续访问,核心是「资源位置变更或需验证」,主要关联 HTTP/1.0 及以上协议(WebSocket 建立连接后无重定向场景)。

状态码 名称 核心含义 关联协议 应用场景 注意点
301 Moved Permanently(永久重定向) 资源已永久迁移到新地址 HTTP/1.0 及以上、HTTP 重定向协议 网站域名更换(如 old.com 迁移到 new.com)、页面路径调整(如 /v1/user 迁移到 /v2/user) 客户端下次应直接访问新地址(浏览器会缓存重定向关系,需通过 Ctrl+F5 强制刷新清除缓存)
302 Found(临时重定向) 资源临时迁移到新地址 HTTP/1.0 及以上、HTTP 重定向协议 网站临时维护页面(访问首页跳转到 /maintain.html)、登录后跳转(如未登录访问 /user 跳转到 /login) 客户端下次仍需访问原地址(不缓存重定向关系,每次请求都会经过原地址判断)
303 See Other(查看其他地址) 需通过 GET 方式访问新地址 HTTP/1.1 及以上、HTTP 重定向协议 POST 提交成功后跳转(如表单提交后跳转到结果页,避免刷新表单重复提交)、支付后跳转(支付成功后从 POST 接口跳转到订单详情页) 强制将原请求方法转为 GET 请求(即使原请求是 POST,跳转后也会用 GET 访问新地址)
304 Not Modified(未修改) 资源未变更,可使用本地缓存 HTTP/1.1 及以上、HTTP 缓存协议(强缓存+协商缓存) 静态资源(JS/CSS/图片)缓存优化;客户端首次请求后缓存资源,再次请求时携带 If-Modified-Since 等头,服务器判断资源未更新则返回304 响应体无内容,仅通过响应头告知缓存可用,大幅减少带宽消耗
307 Temporary Redirect(临时重定向,不改变方法) 临时重定向,保留原请求方法 HTTP/1.1 及以上、HTTP 重定向协议 API 临时迁移(如 /api/user 临时迁移到 /api/v1/user,且需保持 POST/PUT 等非 GET 方法) 与 302 区别:302 可能将 POST 转为 GET,307 严格保留原请求方法(适合 API 接口重定向)
308 Permanent Redirect(永久重定向,不改变方法) 永久重定向,保留原请求方法 HTTP/1.1 及以上、HTTP 重定向协议 API 永久迁移(如 /api/order 永久迁移到 /api/v2/order,且需保持 POST 提交订单的方法) 与 301 区别:301 可能将 POST 转为 GET,308 严格保留原请求方法(适合 RESTful API 永久迁移)

四、4xx 客户端错误状态码(客户端请求有误)

核心是「客户端请求存在问题,服务器无法处理」,需客户端修正请求后重新发送,适配 HTTP 全协议版本、WebSocket 握手阶段 等。

状态码 名称 核心含义 关联协议 常见原因 排查方向
400 Bad Request(请求错误) 请求语法错误或参数不合法 HTTP 全协议版本、WebSocket 握手阶段、RESTful API 规范 1. HTTP 场景:JSON 格式错误、必填参数缺失、参数类型错误;2. WebSocket 场景:握手请求中 Upgrade 头格式错误或缺失 检查请求体格式(如 JSON 引号是否闭合)、参数是否符合接口文档;WebSocket 场景检查握手请求头是否规范
401 Unauthorized(未授权) 请求需身份验证(未登录或令牌失效) HTTP 全协议版本、OAuth 2.0 协议、JWT 认证协议、WebSocket 握手认证 1. HTTP 场景:未传 Token、Token 过期、Token 伪造;2. WebSocket 场景:握手请求中未携带认证 Token 或 Token 无效 检查登录状态、Token 有效性(如 JWT Token 签名是否正确、过期时间是否有效);WebSocket 场景确认认证参数是否在握手头中携带
403 Forbidden(禁止访问) 已登录,但无权限访问资源 HTTP 全协议版本、RBAC 权限协议、IP 黑白名单协议 角色权限不足(普通用户访问管理员接口 /admin/user)、IP 被封禁(非法 IP 访问网站)、资源私有(未授权访问他人隐私数据) 检查用户角色权限配置(如 RBAC 权限表中是否有对应接口权限)、服务器 IP 黑白名单配置
404 Not Found(未找到) 请求的资源不存在 HTTP 全协议版本、WebSocket 握手阶段(路径错误) 1. HTTP 场景:路径错误(如 /usre 拼写错误为 /user)、资源已删除、域名配置错误;2. WebSocket 场景:握手路径错误(如 /ws 写成 /wss) 检查 URL 路径拼写、资源是否存在、Nginx 路由配置(如 proxy_pass 地址是否正确);WebSocket 场景确认路径是否在服务器端注册
405 Method Not Allowed(方法不允许) 请求方法(GET/POST 等)不支持 HTTP 全协议版本、RESTful API 规范 用 POST 访问仅支持 GET 的接口(如 /api/user 仅支持 GET 查询,却用 POST 请求)、用 PUT 访问仅支持 DELETE 的接口 检查接口支持的请求方法(参考接口文档),响应头 Allow 会显示支持的方法(如 Allow: GET, HEAD)
406 Not Acceptable(无法接受) 客户端要求的响应格式服务器无法提供 HTTP/1.1 及以上、内容协商协议 客户端请求头 Accept 要求返回 XML 格式(Accept: application/xml),但服务器仅支持 JSON 格式;客户端要求返回特定编码(Accept-Charset: GBK),服务器仅支持 UTF-8 检查请求头 Accept 字段与服务器响应格式是否匹配,服务器端是否配置了对应的内容协商规则
408 Request Timeout(请求超时) 客户端请求发送超时 HTTP 全协议版本、TCP 协议(连接超时) 网络波动导致请求传输中断、请求体过大导致发送耗时超过服务器超时时间、服务器处理过慢导致客户端等待超时 优化网络环境、拆分大请求(如将 10MB 表单拆分为多个小请求)、检查服务器处理耗时(如 SQL 执行时间)
409 Conflict(冲突) 请求与服务器资源状态冲突 HTTP/1.1 及以上、RESTful API 规范、并发控制协议 新增重复数据(如用户名已存在)、并发修改同一资源(两个用户同时修改同一条订单状态)、资源版本冲突(乐观锁场景下版本号不匹配) 检查资源唯一性约束(如数据库唯一索引)、处理并发冲突(如使用乐观锁 version 字段、分布式锁)
413 Payload Too Large(请求体过大) 请求体超过服务器限制 HTTP/1.1 及以上、服务器配置协议(如 Nginx、Tomcat) 上传大文件(如超过 Nginx 配置的 100MB 限制)、提交过多表单数据(如批量提交 10000 条数据) 拆分请求(如文件分片上传)、压缩文件、调整服务器最大请求体限制(如 Nginx client_max_body_size、Tomcat maxPostSize
415 Unsupported Media Type(不支持的媒体类型) 请求体格式服务器不支持 HTTP/1.1 及以上、内容类型协议(Content-Type) 1. 上传非允许的文件格式(如服务器仅允许上传图片,却上传视频);2. 请求体编码错误(如 Content-Type: application/json 却传表单数据);3. WebSocket 场景:握手请求 Content-Type 错误 检查请求头 Content-Type 字段是否正确、服务器支持的文件类型配置(如上传接口的白名单)
429 Too Many Requests(请求过多) 客户端短期内请求频率过高 HTTP/1.1 及以上、限流协议(如令牌桶、漏桶算法) 未做限流的客户端高频调用接口(如每秒调用 100 次)、爬虫无限制爬取网站数据、恶意攻击导致请求量突增 优化请求频率(如加本地缓存减少请求)、遵循服务器限流规则(响应头 Retry-After 会告知多久后可重试)、客户端实现退避重试机制

五、5xx 服务器错误状态码(服务器处理异常)

核心是「客户端请求合法,但服务器内部出现错误」,需服务器端排查问题,适配 HTTP 全协议版本、WebSocket 握手阶段(服务器异常) 等。

状态码 名称 核心含义 关联协议 常见原因 排查方向
500 Internal Server Error(内部服务器错误) 服务器未知异常 HTTP 全协议版本、WebSocket 握手阶段(服务器代码异常) 1. HTTP 场景:代码 Bug(空指针、数组越界)、配置错误(如数据库连接信息错误)、依赖服务宕机(如调用 Redis 时 Redis 未启动);2. WebSocket 场景:握手处理代码抛出异常 查看服务器日志(如 Tomcat catalina.out、Spring Boot 日志)、排查代码逻辑(如异常捕获是否完整)、检查依赖服务状态(如 Redis、MySQL 是否正常运行)
501 Not Implemented(未实现) 服务器不支持该请求功能 HTTP 全协议版本、协议兼容性协议 访问未开发完成的接口(如 /api/payment 尚未实现)、使用服务器不支持的 HTTP 方法(如 TRACE、OPTIONS 方法未开启)、客户端使用 HTTP/3 但服务器仅支持 HTTP/1.1 检查接口是否已上线(参考接口开发进度)、HTTP 方法是否在服务器端开启(如 Nginx 配置是否允许 OPTIONS 方法)、服务器支持的 HTTP 版本(如是否升级到 HTTP/3)
502 Bad Gateway(网关错误) 网关(如 Nginx)无法连接后端服务器 HTTP 全协议版本、网关协议(如 Nginx、Apache 网关) 后端服务宕机(如 Tomcat 停止运行)、端口占用(后端服务端口被其他程序占用)、网络不通(网关与后端服务之间网络中断)、后端服务返回无效响应 检查后端服务状态(如 `ps -ef
503 Service Unavailable(服务不可用) 服务器暂时无法处理请求(过载或维护) HTTP/1.1 及以上、服务治理协议(如服务熔断、降级) 服务器高负载(CPU 占满 100%、内存溢出)、服务维护中(如部署新版本时停止服务)、微服务熔断(如 Hystrix 触发熔断机制关闭服务) 检查服务器资源使用情况(如 top 命令查看 CPU/内存)、查看服务是否在维护(如部署工具日志)、检查服务治理配置(如 Hystrix 熔断阈值是否合理)
504 Gateway Timeout(网关超时) 网关等待后端服务器响应超时 HTTP 全协议版本、网关协议(如 Nginx、Apache 网关) 后端服务处理过慢(如复杂 SQL 执行耗时超过网关超时时间)、网络延迟(网关与后端服务之间网络延迟过高)、后端服务线程池满(无法处理新请求) 优化后端接口性能(如 SQL 优化、加缓存减少数据库查询)、调整网关超时时间(如 Nginx proxy_connect_timeoutproxy_read_timeout)、扩大后端服务线程池配置
505 HTTP Version Not Supported(HTTP 版本不支持) 服务器不支持客户端使用的 HTTP 版本 HTTP 版本协议(HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3) 客户端使用 HTTP/3 发送请求,但服务器仅支持 HTTP/1.1;客户端使用 HTTP/1.1 的 Pipeline 特性,但服务器未开启该特性 检查客户端使用的 HTTP 版本(如浏览器 F12 Network 面板查看)、服务器支持的 HTTP 版本(如 Nginx 配置 http_protocol、Tomcat 支持的版本)
507 Insufficient Storage(存储不足) 服务器存储空间不足 HTTP/1.1 及以上、文件存储协议 服务器磁盘满(如 / 分区使用率 100%)、上传文件过多未清理(如用户上传文件占满存储目录)、数据库表空间满(如 MySQL 表空间达到上限) 检查服务器磁盘空间(如 df -h 命令)、清理无用文件(如日志文件、过期上传文件)、扩展磁盘容量或数据库表空间

六、开发必备高频状态码速记(含协议关联)

类别 高频状态码 核心场景+协议总结
成功 200、201、204 200=HTTP 全协议查询/提交成功;201=RESTful 协议新增资源成功;204=RESTful 协议删除/更新无返回成功
重定向 301、302、304 301=HTTP 重定向协议永久迁移;302=HTTP 重定向协议临时跳转;304=HTTP 缓存协议缓存命中
客户端错误 400、401、403、404、429 400=全协议请求参数错;401=OAuth/JWT 协议未授权;403=RBAC 协议无权限;404=全协议资源不存在;429=限流协议请求太频繁
服务器错误 500、502、503、504 500=全协议代码 Bug;502=网关协议后端宕机;503=服务治理协议服务过载;504=网关协议后端超时
协议切换 101 101=HTTP/1.1 协议切换为 WebSocket 协议(实时通信核心)

七、实用排查技巧(结合协议场景)

  1. 4xx 错误:优先检查请求 URL、参数、请求头(Content-Type/Accept/Upgrade);涉及认证的 401 需确认认证协议(如 JWT、OAuth)的 Token 有效性;WebSocket 握手阶段的 4xx 需重点检查握手头格式和认证信息。

  2. 5xx 错误:优先查看服务器日志(应用日志、网关日志);502/504 需重点检查网关协议配置(如 Nginx proxy 相关参数);503 需检查服务治理协议(如熔断、降级)配置和服务器资源。

  3. 重定向问题:通过浏览器 F12 「Network」查看「Location」响应头确认新地址;301/308 永久重定向需注意缓存问题,302/307 临时重定向需确认是否保留原请求方法。

  4. 缓存问题:304 错误时,检查客户端是否携带 HTTP 缓存协议的标识(If-Modified-Since/If-None-Match),服务器是否正确判断资源更新状态;静态资源缓存需结合 Cache-Control 头配置。

  5. WebSocket 相关:握手阶段的 100/101 是正常流程,出现 400/401/500 需分别排查握手头格式、认证信息、服务器代码;建立连接后无状态码,通信异常需查帧协议(如数据帧格式错误)。

这份文档补充了各状态码对应的核心关联协议,更贴合实际开发中不同协议场景的使用需求。

我是周伟,专注于Java和架构领域,坚持撰写有原理,有实战,有体系的技术文章。