HTTP 状态码速查
从 100 到 511,每个状态码的含义和最常见的出问题原因,排查时不用再翻文档。
显示 62 / 62 个状态码
分类说明
| 分类 | 范围 | 含义 |
|---|---|---|
| 1xx 信息 | 100 – 199 | 请求已收到,需要继续处理 |
| 2xx 成功 | 200 – 299 | 请求已被正常处理 |
| 3xx 重定向 | 300 – 399 | 需要进一步动作才能完成请求 |
| 4xx 客户端错误 | 400 – 499 | 请求本身有问题,服务端不予处理 |
| 5xx 服务端错误 | 500 – 599 | 服务端在处理请求时出错 |
状态码清单
| 码 | 含义 | 排查方向 |
|---|---|---|
| 100 继续 | 服务端已收到请求头,客户端可以继续发送请求体。 Continue | 请求体较大或带 Expect: 100-continue 时出现,属正常流程。 |
| 101 切换协议 | 服务端同意按请求头里的 Upgrade 切换协议。 Switching Protocols | WebSocket 握手成功后返回,抓包时看到它说明连接已升级。 |
| 102 处理中 | 服务端正在处理,但还没有结果可返回,避免客户端超时。 Processing | WebDAV 场景常见,普通接口很少用。 |
| 103 早期提示 | 在最终响应前先把 Link 头返回,让浏览器提前预加载。 Early Hints | CDN 和反向代理用来提前推送样式和脚本,可以减少首屏等待。 |
| 200 成功 | 请求成功,响应体里是结果。 OK | 最常见的情况。如果接口返回 200 但业务失败,检查响应体里的自定义错误码。 |
| 201 已创建 | 请求成功并创建了新资源。 Created | 响应头的 Location 通常给出新资源的地址,POST 建资源时返回。 |
| 202 已接受 | 请求已进入队列,但处理还没完成。 Accepted | 异步任务提交后用,后续要另开接口或轮询查询进度。 |
| 203 非授权信息 | 返回的元信息来自副本而非源服务器。 Non-Authoritative Information | 代理改写响应头时出现,很少需要处理。 |
| 204 无内容 | 处理成功,但按约定不返回响应体。 No Content | DELETE 成功、PUT 更新成功常用。前端拿到空响应体属正常,不要再解析 JSON。 |
| 205 重置内容 | 要求客户端重置文档视图,比如清空表单。 Reset Content | 提交表单成功后让页面清空时使用。 |
| 206 部分内容 | 按 Range 请求头返回资源的一部分。 Partial Content | 视频拖动进度条、大文件断点续传都靠它。返回 200 而不是 206 时说明范围请求没被支持。 |
| 207 多状态 | 响应体里包含多个独立状态,按资源分别给出。 Multi-Status | WebDAV 批量操作使用,需要解析 XML 里的每个子状态。 |
| 208 已报告 | 同一集合里的成员已经在前面报告过,不再重复。 Already Reported | WebDAV 绑定循环时用来避免死循环。 |
| 226 IM 已使用 | 服务端对实例做了增量更新。 IM Used | HTTP Delta 编码场景,实际很少遇到。 |
| 300 多种选择 | 请求对应多个可选资源,需要客户端选一个。 Multiple Choices | 很少主动返回,多数客户端直接忽略。 |
| 301 永久重定向 | 资源已永久搬到新地址。 Moved Permanently | 换域名、改 URL 结构时用。浏览器会长期缓存,配错后很难回退,务必带正确 Location。 |
| 302 临时重定向 | 资源暂时在别处,下次请求仍用原地址。 Found | 登录跳转、活动页跳转常用。注意历史上部分客户端会把 302 当 303 处理。 |
| 303 查看其他地址 | 要求客户端改用 GET 请求另一个地址。 See Other | 表单提交成功后跳结果页,用它可以避免刷新时重复提交。 |
| 304 未修改 | 缓存还有效,直接用本地副本。 Not Modified | 配合 ETag 或 Last-Modified 出现。如果响应体是空的但页面没更新,检查缓存头和 CDN 配置。 |
| 305 使用代理 | 必须通过指定代理访问。 Use Proxy | 因为安全问题已被废弃,不要在新项目里用。 |
| 307 临时重定向(保持方法) | 和 302 类似,但要求保持原请求方法。 Temporary Redirect | POST 需要原样转发到新地址时用 307,用 302 可能被改成 GET 而丢请求体。 |
| 308 永久重定向(保持方法) | 和 301 类似,但要求保持原请求方法。 Permanent Redirect | 接口地址永久迁移且是 POST 的场景,比 301 更安全。 |
| 400 请求错误 | 请求语法或参数有问题,服务端拒绝处理。 Bad Request | 最常见的原因是 JSON 格式错误、字段类型不对、必填项缺失。先看响应体里的错误信息。 |
| 401 未认证 | 没有提供身份凭证,或者凭证已失效。 Unauthorized | Token 过期、没带 Authorization 头、Cookie 被清理都会触发。前端应清理本地登录态。 |
| 402 需要付款 | 预留给付费场景的状态码。 Payment Required | 标准里长期保留未使用,少数 SaaS 拿它表示额度用尽。 |
| 403 禁止访问 | 身份已确认,但没有权限访问该资源。 Forbidden | 和 401 的区别是「你是谁我知道,但你不能看」。检查角色、权限点、IP 白名单或防盗链。 |
| 404 未找到 | 请求的资源不存在。 Not Found | 路径拼错、资源被删、单页应用没配 history 回退都会这样。也可能是接口有意隐藏资源存在性。 |
| 405 方法不允许 | 资源存在,但不支持这个请求方法。 Method Not Allowed | 用 POST 调了只接受 GET 的接口。响应头的 Allow 会列出支持的方法。 |
| 406 不可接受 | 无法按 Accept 头要求的格式返回。 Not Acceptable | 请求要求 application/xml 但服务端只出 JSON,检查 Accept 头。 |
| 407 需要代理认证 | 需要先向代理服务器认证。 Proxy Authentication Required | 公司网络代理没配账号密码时出现。 |
| 408 请求超时 | 服务端等待请求的时间太长,主动断开。 Request Timeout | 客户端网络慢或请求体没发完。也可能是连接复用时中间设备抢先断连。 |
| 409 冲突 | 请求与资源当前状态冲突。 Conflict | 并发更新、唯一键重复、状态机不允许的操作。通常需要先读取最新状态再重试。 |
| 410 已删除 | 资源曾经存在,现在永久删除了。 Gone | 比 404 更明确,搜索引擎看到 410 会更快清理索引。 |
| 411 需要长度 | 请求必须带 Content-Length。 Length Required | 流式上传且没给长度时出现。 |
| 412 前置条件失败 | If-Match 等前置条件不成立。 Precondition Failed | 乐观锁更新时版本号变了会返回它,重新拉取数据再提交。 |
| 413 内容过大 | 请求体超过了服务端允许的大小。 Content Too Large | 上传大文件时常见。调 Nginx 的 client_max_body_size,或改成分片上传。 |
| 414 URI 过长 | 请求地址超过服务端能处理的上限。 URI Too Long | GET 把大量参数塞进 query 导致。改成 POST,或缩短参数。 |
| 415 不支持的媒体类型 | 请求体的格式服务端不认。 Unsupported Media Type | 漏了 Content-Type: application/json 最常见,前端 fetch 要显式设置。 |
| 416 范围不满足 | Range 请求的范围超出了资源大小。 Range Not Satisfiable | 断点续传时本地记录的偏移量比文件还大就会这样,需要重新下载。 |
| 417 期望失败 | 无法满足 Expect 请求头。 Expectation Failed | 老代理不支持 100-continue 时出现,去掉 Expect 头即可。 |
| 418 我是茶壶 | 愚人节玩笑码,现在被用来做彩蛋或拦截爬虫。 I'm a teapot | 某些站点用它挡住明显的自动化请求,看到它可以先换个正常 UA 再试。 |
| 421 请求被误导 | 请求发到了无法响应该域名的服务器。 Misdirected Request | HTTP/2 连接复用加 SNI 不匹配时出现,检查证书和虚拟主机配置。 |
| 422 无法处理的实体 | 格式没问题,但语义校验不通过。 Unprocessable Content | Rails 和不少框架用它返回字段校验失败,错误详情一般在响应体里。 |
| 423 已锁定 | 资源被锁住,暂时不能访问。 Locked | WebDAV 或者业务上的「账号被锁」会用这个码。 |
| 424 依赖失败 | 因为前置的另一个请求失败了,本次也不处理。 Failed Dependency | 批量操作里常见,需要先解决被依赖的那一步。 |
| 425 过早 | 为避免重放攻击,拒绝可能被重放的请求。 Too Early | TLS 早期数据场景,客户端重试一次通常就好。 |
| 426 需要升级 | 要求客户端换用更高版本的协议。 Upgrade Required | 服务端只接受 TLS 或 HTTP/2 时返回,响应头会给出 Upgrade。 |
| 428 需要前置条件 | 要求请求带条件头,避免并发覆盖。 Precondition Required | 服务端强制乐观锁时返回,加上 If-Match 再试。 |
| 429 请求过多 | 触发了限流。 Too Many Requests | 看 Retry-After 头决定等多久。前端要做退避重试,别立刻重发。 |
| 431 请求头过大 | 请求头总大小超限。 Request Header Fields Too Large | Cookie 攒太多最常见,清理旧 Cookie 或把大状态挪到服务端。 |
| 451 因法律原因不可用 | 因法律要求无法提供该资源。 Unavailable For Legal Reasons | 版权或合规下架时使用。 |
| 500 服务器内部错误 | 服务端处理时抛了未捕获的异常。 Internal Server Error | 看服务端日志和堆栈。如果只在特定请求出现,通常是空指针、类型转换或数据库约束冲突。 |
| 501 未实现 | 服务端不支持完成请求所需的功能。 Not Implemented | 请求方法或头没被实现,比如老服务器不支持 PATCH。 |
| 502 网关错误 | 网关从上游收到的响应无效。 Bad Gateway | 后端进程挂了、端口不对、启动还没完成最常见。先确认上游服务是否存活。 |
| 503 服务不可用 | 服务暂时无法处理请求,通常是过载或维护。 Service Unavailable | 会带 Retry-After。扩缩容、限流、健康检查失败都会返回它。 |
| 504 网关超时 | 网关等上游响应超时。 Gateway Timeout | 慢查询、外部接口卡住、超时阈值太小。调大代理超时通常只是掩盖问题,先定位慢在哪。 |
| 505 不支持的 HTTP 版本 | 不支持请求使用的协议版本。 HTTP Version Not Supported | 少见,一般是客户端用了服务端不认的版本。 |
| 506 变体也会协商 | 内容协商配置成了循环。 Variant Also Negotiates | 服务端协商配置错误,属于服务端问题。 |
| 507 存储空间不足 | 服务端无法存储完成请求所需的内容。 Insufficient Storage | 磁盘写满、配额用尽。WebDAV 场景常见。 |
| 508 检测到循环 | 处理请求时发现了无限循环。 Loop Detected | WebDAV 目录里出现指向自身的链接会触发。 |
| 510 需要扩展 | 还需要额外的扩展才能满足请求。 Not Extended | 几乎不用,属于历史遗留状态码。 |
| 511 需要网络认证 | 需要先通过认证才能上网。 Network Authentication Required | 酒店、机场的公共 Wi-Fi 强制门户靠它把浏览器导向登录页。 |
几个容易混淆的地方
401 和 403 的区别在于身份。401 是「不知道你是谁」,需要先登录或刷新凭证;403 是「知道你是谁,但你不能看这个」,是权限问题,重新登录没有用。
301 和 308 都是永久重定向,302 和 307 都是临时重定向,区别在于后一个数字要求客户端保持原来的请求方法。如果接口地址变了而且是 POST 请求,用 301 或 302 有被改成 GET 而丢掉请求体的风险,应该用 308 或 307。
502、503、504 都出在网关这一层。502 是网关拿到的上游响应无效,通常是后端进程挂了或端口不对;503 是服务主动拒绝,常见于过载、限流和发布重启;504 是等上游超时,要去看后端是不是有慢查询或卡住的外部调用。
422 和 400 都表示请求有问题。400 偏语法和格式,422 偏语义和业务校验,具体用哪个取决于框架约定,看响应体里的错误详情最可靠。