HTTP 状态码查询
HTTP 状态码查询是一个免费在线速查工具:输入 404、502 或粘贴响应头、curl 输出、Nginx 日志,即查中文含义、出现场景、常见原因,以及调用方与服务端两侧的排查步骤,并给出该不该重试、是否可缓存与相关响应头,附 301/302/303/307/308 重定向对照和 Cloudflare 520、Nginx 499 等非标准码。全程浏览器本地查表,不访问你输入的任何网址,也不上传。
请输入状态码,或粘贴一段响应头 / 日志
🟢 浏览器端 · 数据不上传:状态码表随页面本地打包,查询与粘贴解析全程在你的设备上完成,输入的日志与响应头不会离开浏览器。本页只解释状态码,不会去访问你输入的任何网址——它是解释状态码的字典,不是探测网址的探针。本地只记住你选的视图和最近查过的状态码数字,不保存粘贴的日志原文。 已收录 89 个状态码(含 26 个非标准扩展),数据更新于 2026-08。
如何使用HTTP 状态码查询
在输入框里填状态码或关键词:404、HTTP/1.1 404、状态码404、404、Not Found、网关超时都能命中;填 4xx、50x 会按大类列出该类全部状态码。
看结果卡:中文含义、出现场景、常见原因、调用方与服务端两侧的排查步骤、该不该重试、是否可缓存、相关响应头,以及和它最容易搞混的那个码;点「和 403 有什么区别」可以两卡并排对照。
要批量看日志就切到「粘贴解析」:把响应头、curl 输出、Nginx 访问日志或一列状态码整段贴进来,逐行标注按什么规则识别出了哪个码,并给出分类占比与汇总结论,可复制 TSV 或下载。
关于HTTP 状态码查询的常见问题
- HTTP 状态码查询会上传我的数据吗?
- 不会。整份状态码表随页面一起打包在你的浏览器里,查询和粘贴解析都在本地完成,你输入的日志、响应头不会被发送到服务器,也不会写进本地存储——本地只保存你选的视图偏好和最近查过的状态码数字(纯数字,不含日志原文),随时可以点「清除记录」删掉。还有一点要说清楚:本页只解释状态码,不会去访问你输入的任何网址,它是字典而不是探针。
- 404 是什么意思?页面 404 怎么解决?
- 404 Not Found 表示服务器正常响应了,但按这个 URL 找不到对应资源。调用方先查:URL 拼写、大小写、多余或缺失的斜杠、中文和空格有没有做 URL 编码、接口前缀(例如 /api/v1)是否漏了、请求方法对不对。服务端再查:路由是否注册、路由顺序有没有被通配规则抢先匹配、静态文件是否部署到位、重写规则是否把请求吃掉、是不是被网关按路径拦掉了。注意 404 说明网络是通的、服务器是活着的,只是那个地址上没有东西。
- 500 错误是我的问题还是服务器的问题?
- 500 Internal Server Error 是服务端在处理过程中抛了没被接住的异常,责任在服务端。作为调用方你能做的有限:确认请求本身合法、换一组参数看是否稳定复现、把请求 id 或出现时间点交给服务端,然后做好退避重试与降级,别在故障期把服务打得更死。服务端应当直接去看应用日志里的堆栈,而不是靠猜——500 的信息量全在日志里,响应体通常什么都不会告诉你。常见根因是空指针、数据库连接失败、配置缺失和磁盘写满。
- 502、503、504 状态码有什么区别?
- 三个都是 5xx,但坏的地方不一样:502 Bad Gateway 是网关连上了上游、但上游返回了无效响应或者直接挂了,发布重启的那几秒最容易出现;503 Service Unavailable 是这台服务自己声明「我现在不可用」,常见于过载、维护或熔断,规范建议带上 Retry-After;504 Gateway Timeout 是网关连上了上游、但在超时时间内没等到完整响应,根因通常是慢查询或慢的第三方调用。简单记:502 上游坏了,503 本服务主动拒服务,504 上游太慢。
- 401 和 403 有什么区别?分别什么时候用?
- 401 表示没通过身份认证:没带 token、token 过期或签名不对,服务端应当带上 WWW-Authenticate 头告诉客户端该用哪种方式认证,前端通常会清掉凭证把用户送回登录页。403 表示认证过了但没有权限:你确实是这个人,但这个人不能做这件事,重新登录也没用,应该提示联系管理员。注意 401 的英文短语是 Unauthorized,字面看像「未授权」,实际含义是「未认证」,这是全网最常见的误解。
- 404 和 410 有什么区别?删掉的页面返回哪个?
- 404 表示「现在找不到」,不承诺这个资源以前有没有、以后还会不会有;410 Gone 表示「以前有,已经被永久删除了,别再来了」。如果你明确知道内容被永久下线,返回 410 更准确,搜索引擎收到这个更强的信号后通常会更快地把它从索引里去掉;不确定的情况用 404 就好。实现上还有一点差别:两者默认都属于可缓存的响应,所以别在临时故障时随手返回 404 或 410,那会被缓存下来。
- 301 和 302 该用哪个?对 SEO 有影响吗?
- 永久搬家用 301,搜索引擎会把旧地址的权重逐步转到新地址,浏览器和 CDN 默认还会缓存这个跳转;临时跳转用 302,旧地址仍被视为主地址,权重不转移。选错的代价是真实的:该用 301 时用了 302,新地址迟迟拿不到权重;该用 302 时用了 301,用户浏览器可能长期缓存着一个你早就想撤销的跳转,测试时要用无痕窗口才看得到改动。所以不确定是不是永久搬家时,先用 302 更安全。
- 304 状态码是什么意思?为什么刷新全是 304?
- 304 Not Modified 的编号落在 3xx 里,做的却不是跳转,而是条件请求的缓存校验:浏览器带着 If-None-Match 或 If-Modified-Since 去问服务端「我手上这份还能用吗」,内容没变服务端就回一个不带响应体的 304,让你继续用本地副本。所以刷新页面时静态资源大量返回 304,说明协商缓存生效了,属于正常现象,省下的是正文的传输量而不是那一次往返。想连这次往返也省掉,得靠 Cache-Control 的 max-age 命中强缓存——那时候开发者工具里显示的是 200,而不是 304。
- 307、308 和 301、302 有什么不一样?
- 关键区别是方法和请求体会不会被保留。规范本身并不允许改写方法,但实践中浏览器遇到 301、302 时普遍会把 POST 改写成 GET,请求体直接丢失,规范后来也承认了这个既成事实。307 Temporary Redirect 和 308 Permanent Redirect 是专门补上的两个码,明确要求保留原方法与请求体。所以:接口做跳转必须用 307(临时)或 308(永久),页面搬家用 301、302 即可。另外 303 See Other 正相反,它要求改成 GET,适合 POST 提交后跳到结果页。
- 499 是什么状态码?为什么日志里全是 499?
- 499 不是 RFC 定义的标准状态码,是 Nginx 自己记的:客户端在服务端还没返回之前就断开了连接,所以这条响应根本没发出去。日志里成片的 499 通常意味着后端太慢、用户等不及关掉了页面或取消了请求,也可能是客户端超时设得比服务端处理时间短,或者上层有重试机制在提前掐断连接。排查方向是后端耗时,而不是 Nginx 本身。顺带一提,Esri 的 ArcGIS Server 也用 499 表示「缺少令牌」,同码不同义,本页会并列展示。
- Cloudflare 520、521、524 分别是什么错误?
- 这三个都是 Cloudflare 的非标准状态码,说明问题出在 Cloudflare 到你的源站之间:520 是源站返回了 Cloudflare 无法理解的响应,属于兜底错误码;521 是源站直接拒绝连接,多为服务挂了或防火墙把回源 IP 挡了;524 是连上了但源站在超时时间内没返回完,本质就是网关超时。同族还有 522 连接超时、523 源站不可达、525 与 526 的 SSL 握手与证书问题、530 加一个 1xxx 内部错误号。排查一律回到源站看日志,而不是在浏览器里打转。
- 接口返回 200 但业务失败该用什么状态码?
- 该用什么就返回什么:参数错 400、未认证 401、无权限 403、找不到 404、限流 429、服务端异常 500,业务错误码留在响应体里作为补充说明,而不是让状态码永远是 200。全部返回 200 的代价分摊在整条链路上:监控按状态码统计错误率,接口挂了也不会报警;CDN 与浏览器会按 200 的缓存规则把一个失败响应缓存下来,用户刷新也拿不到正确结果;客户端库和网关的重试策略认状态码,200 一律不重试。迁移可以渐进:新接口先用对状态码,同时保留响应体里的业务码给老客户端,等调用方都升级完再把兜底的 200 去掉。
- 创建成功返回什么状态码?201 和 204 怎么选?
- 创建成功返回 201 Created,并在 Location 头里给出新资源的地址,响应体通常带上刚创建的对象;删除成功返回 204 No Content,注意 204 的响应体必须为空,塞一段 JSON 回去反而不合规。更新成功可以用 200 并返回更新后的对象,不打算回传内容就用 204。还有一个常被忽略的场景:异步任务只是被受理、还没真正做完时应该用 202 Accepted,并在响应里告诉调用方去哪里查进度,比返回 200 假装已经完成要诚实得多。
- 接口参数错了应该返回 400 还是 422?
- 400 Bad Request 表示请求本身就不对,服务端根本没法正常解析,比如 JSON 语法错、必填字段缺失、类型完全不符;422 Unprocessable Content 表示格式解析没问题、但语义上通不过校验,比如日期在未来、金额是负数、两个字段互相冲突。两者边界确实模糊,团队内统一约定比纠结哪个更「正确」更重要,全项目只用 400 也是完全可以接受的方案。真正要避免的是同一个项目里两个码混着用,还没有文档写清边界。
- 429 太多请求怎么处理?Retry-After 怎么用?
- 429 Too Many Requests 表示你触发了限流。服务端应当在响应里带 Retry-After,值可以是秒数,也可以是一个 HTTP 日期,告诉你多久之后再来。客户端拿到 429 时应当按这个值等待,没有这个头就用指数退避(1 秒、2 秒、4 秒逐步拉长,并加一点随机抖动),不要立刻原地重试——那只会让限流更严。还要注意区分 429 和 503:针对某个调用方的限流用 429,整体不可用或维护中用 503,用错会让调用方采取错误的应对策略。
- 413 请求体过大怎么解决?Nginx 要改哪里?
- 413 Content Too Large 表示请求体超过了某一层的上限,而这个上限往往不止一层。最先撞上的通常是 Nginx:client_max_body_size 默认只有 1MB,超了直接由 Nginx 返回 413,请求根本到不了应用。把它调成 client_max_body_size 50m 之后还要逐层往里看——PHP 的 upload_max_filesize 与 post_max_size、Tomcat 的 maxPostSize、Node 里 express.json 的 limit,以及云上负载均衡和 CDN 各自的请求体上限。排查顺序是从外往里找谁先拒绝:只改了应用没改网关,返回的还是 413。
- HTTP 状态码查询能直接测某个网址返回的状态码吗?
- 不能,这是有意的设计。从浏览器直接去请求别人的网址会被同源策略挡住,绕过它需要一个服务端代理替你发请求,那既超出了本站纯前端的范围,也属于对外探测行为。本页只做「解释状态码」这一件事,你输入的任何内容都不会被拿去访问。想看某个网址的真实状态码,用浏览器开发者工具的网络面板,或者直接看服务端的访问日志;把那一行日志粘到本页的「粘贴解析」里,就能得到含义、场景与两侧排查步骤。
- 418 I am a teapot 是真的 HTTP 状态码吗?
- 它出自 RFC 2324,一份 1998 年愚人节发布的「超文本咖啡壶控制协议」,意思是「我是茶壶,煮不了咖啡」。但它确实被不少框架和网关实现了,也常被拿来当彩蛋或反爬标记。它并不在 IANA 的正式状态码注册表里作为通用语义使用,所以不要用在生产接口上——业务含义请改用 400、403、429 这类语义明确的码,否则调用方与网关都得为它写一段特判。
- 粘贴解析支持哪些日志格式?状态码最多能贴多少行?
- 认四种常见形态:响应头首行(HTTP/1.1 404 Not Found)、Nginx 与 Apache 访问日志的请求行("GET /a HTTP/1.1" 499 0)、curl -i 打印出来的响应头,以及整行只有一个三位数的纯状态码列表。每一行都会标出是按哪条规则识别出来的,识别不到的行也写明原因,不做黑盒猜测;日志行里的 IP、时间和字节数不会被误当成状态码。单次上限是 50000 行、2MB 文本,超出部分会明确提示被截断;逐行明细只展示前 200 行,分类占比与汇总结论仍按全部识别到的行计算。结果可以复制 TSV,也可以下载成制表符分隔的 .txt(UTF-8 编码),粘进 Excel 或表格软件即可分列。
- HTTP 状态码查询工具免费吗?需要注册吗?
- 完全免费,不需要注册、不需要登录,也没有查询次数限制或付费档位。整份状态码表和解析逻辑随页面一起下载到你的浏览器里,之后每次查询都是本地查表,不占用服务器资源,也就没有按次收费的道理。页面不加水印、不限制复制,速查表、结果 TSV 都可以自由复制或下载,拿去写团队的接口规范、值班手册或培训材料都没有问题。唯一的规模限制在粘贴解析:单次最多 50000 行、2MB 文本,这是为了不让超大日志把你自己的浏览器卡住。
- 手机上能用 HTTP 状态码查询工具吗?
- 能,用手机浏览器打开本页即可,不用装任何 App。窄屏下并排的两张对照卡会自动竖向堆叠,速查表与逐行解析表格改成横向滑动查看,按钮和输入框保持 40 像素以上的触控高度,不至于点不中。手机上最常见的用法是值班时收到告警或截图,直接输入那个三位数看中文含义与两侧排查步骤;粘贴解析在手机上同样可用,但手机内存有限,几万行的日志还是建议回到电脑上再处理。
HTTP 状态码分类速查:1xx 2xx 3xx 4xx 5xx 分别代表什么
HTTP 响应码按首位数字分成五个大类,先看首位就能判断「这是谁的锅、该先查谁」,这是读日志时最省时间的一步。 下面这张状态码对照表给出每一类的含义与排查方向,本页的全部条目也按这五类加上一组非标准扩展来分组。
| 类别 | 含义 | 先查谁 |
|---|---|---|
| 1xx 信息 | 请求已收到、还在继续处理的中间响应,浏览器通常不会展示给你看。 | 协议层的中间状态,一般不需要排查;看到它多半是在抓包或读握手日志。 |
| 2xx 成功 | 请求被正常接收、理解并处理完成,是接口最应该返回的一类。 | 不用排查;但要小心「HTTP 200 + 业务失败」这种把错误藏在响应体里的反模式。 |
| 3xx 重定向 | 资源换地方了或者可以复用缓存,客户端需要再做一步动作。 | 先看 Location 指向哪里、是不是绕成了循环;304 属于缓存命中,不是跳转。 |
| 4xx 客户端错误 | 服务器认为请求本身有问题,原样重发通常还是同样的结果。 | 先检查请求本身:URL、方法、请求头、参数、凭证,改对了再发。 |
| 5xx 服务端错误 | 请求可能没问题,是服务端或中间网关这一侧出了状况。 | 先看服务端日志与网关日志;调用方能做的只有退避重试和把请求 id 交出去。 |
全部 HTTP 状态码速查表(http 状态码大全,按类别分组)
下面是本站收录的全部 89 个状态码(含 26 个非标准扩展)的响应状态码速查表,四列分别是状态码、英文短语、中文名和一句话含义。 需要出现场景、常见原因、两侧排查步骤和重试与缓存结论,在上方输入框里查对应的三位数字即可。状态码数据版本 2026.08,更新于 2026-08,半年复核一次。
1xx 信息有哪些状态码(4 个)
请求已收到、还在继续处理的中间响应,浏览器通常不会展示给你看。
| 状态码 | 英文短语 | 中文名 | 一句话含义 |
|---|---|---|---|
| 100 | Continue | 继续 | 客户端带 Expect: 100-continue 先问一句「这个请求体我能发吗」,服务端回 100 表示同意,客户端才把请求体真正发出去。 |
| 101 | Switching Protocols | 切换协议 | 服务端同意按客户端的请求切换协议,最常见的就是把一条 HTTP 连接升级成 WebSocket 长连接。 |
| 102 | Processing | 处理中 | WebDAV 扩展的中间响应,表示请求已收到、正在处理,用来防止客户端在长耗时操作上提前超时。 |
| 103 | Early Hints | 早期提示 | 在最终响应还没准备好之前,先把 Link 头发给浏览器,让它提前去预连接、预加载关键的 CSS 与字体。 |
2xx 成功有哪些状态码(10 个)
请求被正常接收、理解并处理完成,是接口最应该返回的一类。
| 状态码 | 英文短语 | 中文名 | 一句话含义 |
|---|---|---|---|
| 200 | OK | 成功 | 请求被正常接收、理解并处理完成,响应体里就是你要的结果,是最常见也最应该出现的状态码。 |
| 201 | Created | 已创建 | 请求成功并且新建了资源,服务端应当在 Location 头里给出新资源的地址,方便客户端直接访问。 |
| 202 | Accepted | 已受理 | 请求已经被收下,但还没处理完,服务端只承诺受理,最终成不成功要靠客户端后续自己去查,适合异步任务。 |
| 203 | Non-Authoritative Information | 非权威信息 | 请求成功,但返回的内容被中间代理改过,不是源站原封不动的版本,所以叫「非权威」。 |
| 204 | No Content | 无内容 | 请求处理成功,但响应里没有任何内容,规范上它必须为空;客户端不必去解析响应体,页面也不用跳转。 |
| 205 | Reset Content | 重置内容 | 请求处理成功,同时要求客户端把当前的表单或视图重置成初始状态,方便用户接着录入下一条记录。 |
| 206 | Partial Content | 部分内容 | 客户端用 Range 头只要了资源的一部分,服务端就返回这一段,并在 Content-Range 里说明范围。 |
| 207 | Multi-Status | 多状态 | WebDAV 扩展:一次请求操作了多个资源,响应体是一份 XML,里面逐个给出每个资源各自的状态码。 |
| 208 | Already Reported | 已报告 | WebDAV 绑定扩展:同一个资源在这次多状态响应里已经列过一次了,这里不再重复展开它的属性。 |
| 226 | IM Used | 已使用实例操纵 | 服务端没有返回完整资源,而是返回了对当前版本做的一个或多个差量结果,用来省流量。 |
3xx 重定向有哪些状态码(9 个)
资源换地方了或者可以复用缓存,客户端需要再做一步动作。
| 状态码 | 英文短语 | 中文名 | 一句话含义 |
|---|---|---|---|
| 300 | Multiple Choices | 多种选择 | 同一个地址对应多个可选表示(不同语言、不同格式),服务端把选项列出来让客户端或用户挑一个。 |
| 301 | Moved Permanently | 永久重定向 | 资源已经永久搬到 Location 指向的新地址,以后请直接访问新地址,浏览器和 CDN 默认会缓存这次跳转。 |
| 302 | Found | 临时重定向 | 资源临时换了个地址,这次请去 Location,但下次还请继续访问原地址,默认不会被缓存。 |
| 303 | See Other | 查看其他位置 | 要的结果在另一个地址上,且规范明确要求客户端改用 GET 去取,专治表单重复提交。 |
| 304 | Not Modified | 未修改 | 你本地缓存的那份还是最新的,服务端不再重发内容,因此 304 不带响应体,它也不是重定向。 |
| 305 | Use Proxy | 使用代理 | 早期规范里用来告诉客户端「必须经由某个代理访问」,因为存在安全隐患,现已被废弃、浏览器不再实现。 |
| 306 | Switch Proxy | 切换代理 | 早期草案里短暂用过的一个码,现在被永久保留、不再分配任何含义,任何实现都不应该返回它。 |
| 307 | Temporary Redirect | 临时重定向(保留方法) | 和 302 一样是临时跳转,但明确要求保留原来的请求方法和请求体,POST 跳过去还是 POST。 |
| 308 | Permanent Redirect | 永久重定向(保留方法) | 和 301 一样是永久跳转、默认可缓存,但明确要求保留原方法与请求体,POST 不会被改写成 GET。 |
4xx 客户端错误有哪些状态码(29 个)
服务器认为请求本身有问题,原样重发通常还是同样的结果。
| 状态码 | 英文短语 | 中文名 | 一句话含义 |
|---|---|---|---|
| 400 | Bad Request | 请求错误 | 服务端认为这个请求本身就不合法,根本没法正常解析,不改请求的话原样重发一百次结果还是一样。 |
| 401 | Unauthorized | 未认证 | 英文短语叫 Unauthorized,实际含义是「没通过身份认证」;已经认证过但没有权限,那是 403。 |
| 402 | Payment Required | 需要付费 | 规范里预留给「需要付费才能继续」的状态码,长期没有统一语义,各家用法完全由自己定义。 |
| 403 | Forbidden | 禁止访问 | 服务端明白你是谁,但就是不允许你做这件事;和未认证不同,换个凭证重新登录通常也没有用。 |
| 404 | Not Found | 未找到 | 服务器正常响应了,但按这个地址找不到对应资源;它不承诺资源以前有没有、以后还会不会有。 |
| 405 | Method Not Allowed | 方法不允许 | 这个地址存在,但不接受你用的这个请求方法;服务端必须用 Allow 头列出它到底接受哪些方法。 |
| 406 | Not Acceptable | 不可接受 | 客户端在 Accept 类请求头里限定了想要的格式,服务端拿不出符合条件的表示,于是直接拒绝。 |
| 407 | Proxy Authentication Required | 需要代理认证 | 和 401 结构一样,只是要求你先通过中间代理服务器的认证,认证对象是代理而不是目标站点。 |
| 408 | Request Timeout | 请求超时 | 服务端等客户端把请求发完等太久了,主动断开这条连接;超时发生在接收请求阶段,不是处理阶段。 |
| 409 | Conflict | 冲突 | 请求本身没写错,但和资源当前的状态冲突了,比如版本对不上、唯一值已经被别人占用,改参数没有用。 |
| 410 | Gone | 已永久删除 | 这个资源以前确实存在,现在已经被永久删除了,别再来了;比 404 多给出了「曾经有」这个信息。 |
| 411 | Length Required | 需要内容长度 | 服务端要求请求必须带 Content-Length 头,而这次请求没带,于是直接拒绝接收。 |
| 412 | Precondition Failed | 前置条件失败 | 请求里的条件头(如 If-Match、If-Unmodified-Since)没有通过校验,服务端因此拒绝执行这次操作。 |
| 413 | Content Too Large | 请求体过大 | 请求体超过了服务端或网关允许的大小上限,请求在被业务代码看到之前就已经被拒掉了。 |
| 414 | URI Too Long | 地址过长 | 请求地址超过了服务端允许的长度,通常是因为把本该放在请求体里的数据塞进了查询参数。 |
| 415 | Unsupported Media Type | 不支持的媒体类型 | 请求体的格式服务端不接受,多数时候是 Content-Type 写错了,或者压根没写。 |
| 416 | Range Not Satisfiable | 范围无法满足 | 请求里的 Range 范围超出了资源实际长度,服务端没法按这个区间取内容,于是直接拒绝。 |
| 417 | Expectation Failed | 预期失败 | 请求的 Expect 头提了服务端满足不了的要求,最常见的就是不支持 100-continue 协商。 |
| 418 | I'm a Teapot | 我是茶壶 | 出自 1998 年愚人节的超文本咖啡壶控制协议,意思是「我是茶壶,煮不了咖啡」,是个玩笑码。 |
| 421 | Misdirected Request | 请求被错误路由 | 请求被送到了一台无法为该域名提供服务的服务器上,常见于 HTTP/2 连接复用踩到证书边界的时候。 |
| 422 | Unprocessable Content | 语义校验不通过 | 请求格式解析没问题,服务端也读懂了,但内容通不过业务校验,比如金额是负数、日期在未来。 |
| 423 | Locked | 已锁定 | WebDAV 扩展:目标资源被加了锁,在锁释放之前不允许修改,需要带上正确的锁令牌才能操作。 |
| 424 | Failed Dependency | 依赖失败 | WebDAV 扩展:这次操作依赖的另一个操作失败了,所以它本身也没法执行,属于连带失败。 |
| 425 | Too Early | 太早了 | 服务端不愿意处理这条在 TLS 早期数据里发来的请求,怕它被重放攻击,要求客户端等握手完成再发。 |
| 426 | Upgrade Required | 需要升级协议 | 服务端拒绝按当前协议继续,要求客户端升级后再来,并在 Upgrade 头里说明该升级到什么。 |
| 428 | Precondition Required | 要求带前置条件 | 服务端要求这次更新必须带上条件头(如 If-Match),以免出现「后写的人默默覆盖先写的人」。 |
| 429 | Too Many Requests | 请求过多 | 你在单位时间里发的请求太多,触发了限流;服务端应当带 Retry-After 告诉你多久之后可以再来。 |
| 431 | Request Header Fields Too Large | 请求头过大 | 请求头总体积或某个单独的头太大,超过了服务端的缓冲区上限,请求在解析阶段就被拒绝。 |
| 451 | Unavailable For Legal Reasons | 因法律原因不可用 | 内容因为法律要求被下架或屏蔽,比如版权投诉、法院命令、监管要求,而不是技术故障。 |
5xx 服务端错误有哪些状态码(11 个)
请求可能没问题,是服务端或中间网关这一侧出了状况。
| 状态码 | 英文短语 | 中文名 | 一句话含义 |
|---|---|---|---|
| 500 | Internal Server Error | 服务器内部错误 | 服务端在处理过程中抛出了没被接住的异常,责任在服务端;响应体通常什么线索都不会告诉你。 |
| 501 | Not Implemented | 尚未实现 | 服务端不支持这次请求所需要的功能,通常是不认识这个请求方法,属于能力缺失而不是故障。 |
| 502 | Bad Gateway | 网关错误 | 网关或反向代理连上了上游服务,但上游返回了无效响应或者根本没响应,问题出在上游那一侧。 |
| 503 | Service Unavailable | 服务不可用 | 这台服务自己声明现在不可用,通常是过载、维护或熔断;规范建议带上 Retry-After 说明多久后恢复。 |
| 504 | Gateway Timeout | 网关超时 | 网关连上了上游,但在超时时间内没等到完整响应,于是主动放弃,根因通常是上游处理得太慢。 |
| 505 | HTTP Version Not Supported | 不支持的 HTTP 版本 | 服务端不支持请求里声明的那个 HTTP 协议版本,握手阶段就被拒绝,跟业务逻辑完全无关。 |
| 506 | Variant Also Negotiates | 协商配置错误 | 服务端的透明内容协商配置成了环,某个候选表示自己又要求协商,导致服务端最终选不出任何结果。 |
| 507 | Insufficient Storage | 存储空间不足 | WebDAV 扩展:服务端没有足够的空间保存这次请求的内容,比如磁盘写满或配额用尽。 |
| 508 | Loop Detected | 检测到循环 | WebDAV 绑定扩展:服务端在处理请求时发现了无限循环,主动中断,避免把自己耗死。 |
| 510 | Not Extended | 未扩展 | 出自一份实验性的 HTTP 扩展框架规范,要求请求带上额外的扩展声明;这套机制从未被广泛采用。 |
| 511 | Network Authentication Required | 需要网络认证 | 你需要先通过所在网络的认证才能上网,通常由酒店、机场、咖啡馆的强制门户页面拦截产生。 |
非标准扩展有哪些状态码(26 个)
这些码不在 IANA 注册表里,由 Cloudflare、Nginx、Microsoft IIS、AWS ELB 等厂商或框架自行定义,含义以各自官方文档为准。
| 状态码 | 英文短语 | 中文名 | 一句话含义 |
|---|---|---|---|
| 419 | Page Expired | 页面已过期(非标准 · Laravel) | Laravel 框架用来表示 CSRF 令牌已经失效,通常是页面开太久或会话过期,属于框架自定义的码。 |
| 420 | Enhance Your Calm | 请冷静一下(非标准 · Twitter) | 早期 Twitter API 用来表示限流的非标准码,语气俏皮,如今已经被标准的 429 取代。 |
| 440 | Login Time-out | 登录超时(非标准 · Microsoft IIS) | IIS 用来表示会话已经超时、需要重新登录的非标准码,常见于 Exchange 和 SharePoint 这类微软系应用。 |
| 444 | No Response | 不返回任何响应(非标准 · Nginx) | Nginx 的内部指令:直接关闭连接、一个字节都不返回,只会出现在日志里,客户端永远收不到它。 |
| 449 | Retry With | 补充信息后重试(非标准 · Microsoft IIS) | IIS 的非标准码:这次请求缺少必要信息,服务端希望客户端补齐之后再发一次同样的请求。 |
| 451 | Redirect | 重定向(IIS 扩展)(非标准 · Microsoft IIS) | 微软在 Exchange ActiveSync 里用 451 表示「你该换一台服务器了」,和 RFC 7725 的法律原因毫无关系。 |
| 460 | Client Closed Connection | 客户端提前关闭连接(非标准 · AWS ELB) | AWS 负载均衡记录的非标准码:负载均衡还没来得及把响应发送完整,客户端就先把这条连接断开了。 |
| 463 | Too Many IPs in X-Forwarded-For | X-Forwarded-For 里 IP 过多(非标准 · AWS ELB) | AWS 负载均衡的非标准码:请求的 X-Forwarded-For 头里 IP 数量超过了上限,通常是代理层套得太多。 |
| 464 | Incompatible Protocol Versions | 协议版本不兼容(非标准 · AWS ELB) | AWS 负载均衡的非标准码:客户端与后端目标组之间的协议版本不匹配,请求没法正常转发。 |
| 494 | Request Header Too Large | 请求头过大(Nginx)(非标准 · Nginx) | Nginx 内部使用的码,表示请求头超过了缓冲区大小,对外通常会被转换成标准的 400 返回。 |
| 495 | SSL Certificate Error | 客户端证书错误(非标准 · Nginx) | Nginx 在双向认证场景下的内部码:客户端提供的证书本身有问题,比如格式不对或者签发者不受信任。 |
| 496 | SSL Certificate Required | 需要客户端证书(非标准 · Nginx) | Nginx 内部码:服务端要求双向认证,但客户端一张证书都没提供,握手因此没法继续。 |
| 497 | HTTP Request Sent to HTTPS Port | 把明文请求发到了 HTTPS 端口(非标准 · Nginx) | Nginx 内部码:客户端用明文 HTTP 访问了一个监听 HTTPS 的端口,协议对不上,握手自然失败。 |
| 499 | Client Closed Request | 客户端主动断开(非标准 · Nginx) | Nginx 记录的非标准码:服务端还没来得及返回,客户端就先把连接断了,所以这条响应根本没发出去。 |
| 499 | Token Required | 需要令牌(非标准 · Esri ArcGIS) | Esri 的 ArcGIS Server 用 499 表示请求缺少访问令牌,和 Nginx 那个「客户端断开」完全是两回事。 |
| 509 | Bandwidth Limit Exceeded | 带宽超限(非标准 · Apache/cPanel) | 虚拟主机面板常用的非标准码:站点这个周期的流量配额已经用完,主机商暂时停止对外服务。 |
| 520 | Web Server Returned an Unknown Error | 源站返回了未知错误(非标准 · Cloudflare) | Cloudflare 的兜底错误码:源站返回了它无法理解的响应,比如空响应、超大响应头或者违反协议的内容。 |
| 521 | Web Server Is Down | 源站拒绝连接(非标准 · Cloudflare) | Cloudflare 连不上源站:连接被直接拒绝,通常是源站服务没在跑,或者防火墙把回源 IP 挡住了。 |
| 522 | Connection Timed Out | 回源连接超时(非标准 · Cloudflare) | Cloudflare 在与源站建立 TCP 连接的阶段就超时了,握手根本没完成,请求也就没发出去。 |
| 523 | Origin Is Unreachable | 源站不可达(非标准 · Cloudflare) | Cloudflare 根本找不到通往源站的路,多半是 DNS 记录里的源站地址写错了或者已经失效。 |
| 524 | A Timeout Occurred | 源站响应超时(非标准 · Cloudflare) | Cloudflare 连上了源站,但在超时时限内没等到完整响应,于是主动断开,本质和标准的 504 是一回事。 |
| 525 | SSL Handshake Failed | SSL 握手失败(非标准 · Cloudflare) | Cloudflare 与源站之间的 TLS 握手没谈成,通常是源站证书配置有问题或者双方协议版本对不上。 |
| 526 | Invalid SSL Certificate | 源站证书无效(非标准 · Cloudflare) | Cloudflare 在严格模式下校验源站证书失败:证书过期、域名不符、链不完整或者由不受信任的机构签发。 |
| 527 | Railgun Error | Railgun 链路错误(非标准 · Cloudflare) | Cloudflare 与源站之间的 Railgun 加速链路出错;该产品已经停用,这个码如今基本只有历史意义。 |
| 530 | Cloudflare Error | Cloudflare 侧错误(非标准 · Cloudflare) | Cloudflare 自身或 Workers 出错时返回,通常还会跟着一个真正说明问题的 1xxx 号内部错误码。 |
| 561 | Unauthorized (ELB) | 身份认证失败(ELB)(非标准 · AWS ELB) | AWS 负载均衡在内置身份认证环节出错时记录的非标准码,表示与身份提供方交互失败。 |
五个最常遇到的状态码:404、403、500、502、504
这五个码占了日常排查的绝大多数。下面每一条都给出「什么场景下会看到它」以及调用方和服务端两侧分别能做什么, 不用点开交互区就能读完;想看常见原因清单、相关响应头与该不该重试,在上方输入对应数字。
404 Not Found(未找到)什么时候出现、怎么排查
服务器正常响应了,但按这个地址找不到对应资源;它不承诺资源以前有没有、以后还会不会有。最广为人知的状态码:打开一个失效链接、接口路径写错、静态文件没部署上去,看到的都是 404。它说明网络是通的、服务器活着,只是那个地址上没有东西。
| 调用方能做什么 | 服务端能做什么 |
|---|---|
| 逐字核对 URL:大小写、斜杠、接口前缀、有没有多余的空格;路径里有中文或空格时用 URL 编码工具转一遍再试;确认请求方法对不对,有些框架路径存在但方法不匹配时也会返回 404 | 确认路由确实注册了,并检查路由的先后顺序有没有被通配规则抢先匹配;检查静态资源目录、构建产物是否真的部署到了线上;给站点配一个有用的 404 页面,并保留正确的状态码,别返回 200 加一张提示页 |
403 Forbidden(禁止访问)什么时候出现、怎么排查
服务端明白你是谁,但就是不允许你做这件事;和未认证不同,换个凭证重新登录通常也没有用。常见于三种场景:接口权限不够、静态文件目录权限配错、以及 CDN 或 WAF 把请求判成了恶意流量。第三种最容易误伤,页面上往往还会带上一个 Ray ID 之类的追踪号。
| 调用方能做什么 | 服务端能做什么 |
|---|---|
| 先确认是不是登录错了账号,再找管理员确认权限;如果是被 WAF 拦截,把页面上的追踪号交给运维,能直接查到命中的规则;带 Referer 的防盗链场景,检查请求是不是从允许的页面发出的 | 区分 401 与 403:未登录返回 401,登录了没权限返回 403;检查文件系统权限与 Nginx 的 deny 规则,目录禁止列出也会返回 403;WAF 误伤要能在日志里定位到具体规则,并支持按需放行 |
500 Internal Server Error(服务器内部错误)什么时候出现、怎么排查
服务端在处理过程中抛出了没被接住的异常,责任在服务端;响应体通常什么线索都不会告诉你。接口突然全部报错、页面白屏时最常见。它的信息量全在服务端日志的那段堆栈里,作为调用方你几乎推断不出原因,只能确认请求本身合法并把请求 id 交给后端。
| 调用方能做什么 | 服务端能做什么 |
|---|---|
| 确认请求本身合法,换一组参数看是不是稳定复现;把请求 id、时间点和完整请求交给服务端,比反复重试有用得多;客户端做好降级与退避重试,别在故障期把服务打得更死 | 直接去看应用日志里的堆栈,500 的答案永远在日志里而不在响应体里;接入错误追踪,把请求 id 串起来,定位到具体那一次调用;给关键依赖加超时与熔断,避免一个下游把整个服务拖垮 |
502 Bad Gateway(网关错误)什么时候出现、怎么排查
网关或反向代理连上了上游服务,但上游返回了无效响应或者根本没响应,问题出在上游那一侧。发布重启的那几秒钟最容易看到:Nginx 还在转发,后端进程已经停了。CDN 面板上的 502 同理,说明源站给回的东西 CDN 没法理解,排查方向一律是上游而不是网关本身。
| 调用方能做什么 | 服务端能做什么 |
|---|---|
| 这一侧能做的有限:稍后带退避重试,并把出现时间点反馈给服务方;如果只是发布窗口的短暂抖动,等一两分钟通常自动恢复 | 先确认上游进程还活着、端口在监听,再看上游自己的错误日志;检查反向代理里配置的上游地址、端口与健康检查是否正确;发布时用滚动更新加就绪探针,等新实例就绪再切流量,能消掉大部分发布期 502 |
504 Gateway Timeout(网关超时)什么时候出现、怎么排查
网关连上了上游,但在超时时间内没等到完整响应,于是主动放弃,根因通常是上游处理得太慢。导出大报表、跑复杂查询、调用慢接口时最典型:后端还在算,网关的超时先到了。排查方向永远是上游耗时,而不是去把网关超时一调再调。
| 调用方能做什么 | 服务端能做什么 |
|---|---|
| 把大请求拆小,或者改成异步任务加轮询的方式;客户端超时要设得比网关更长一点,否则你自己先断了还看不到 504 | 先看上游的耗时分布,找出真正慢的那一段,而不是一味调大网关超时;给慢查询加索引、给慢接口加缓存,必要时改成异步任务;长耗时操作改用 202 加任务查询,从设计上避开网关超时 |
301、302、303、307、308 该用哪个(重定向对照表)
重定向这一段是全网被抄错最多的地方。要点只有三句:想保住 POST 用 307 或 308;永久搬家用 301 或 308; POST 之后跳结果页用 303。下表每一格都由本站的状态码数据现算,措辞也刻意写精确—— 301 与 302 是「实践中浏览器会把 POST 改写成 GET」,而 303 是「规范明确要求改成 GET」,这两件事不是一回事。
| 状态码 | 中文名 | 是否永久 | 方法是否保留 | 请求体 | 默认可缓存 | 典型用途 |
|---|---|---|---|---|---|---|
| 301 Moved Permanently | 永久重定向 | 永久 | 不保留 | 丢失 | 是 | 规范本身不允许改写方法,但实践中浏览器普遍把 POST 改写成 GET,规范也承认了这个既成事实;要保住 POST 请用 308。 |
| 302 Found | 临时重定向 | 临时 | 不保留 | 丢失 | 否(除非显式给缓存头) | 规范本身不允许改写方法,但实践中浏览器普遍把 POST 改写成 GET;要保住 POST 请用 307。 |
| 303 See Other | 查看其他位置 | 临时 | 不保留 | 丢失 | 否(除非显式给缓存头) | 和 301/302 的「实践中被改写」不同,303 是规范明确要求把方法改成 GET,请求体不会被带走。 |
| 307 Temporary Redirect | 临时重定向(保留方法) | 临时 | 保留 | 保留 | 否(除非显式给缓存头) | 规范明确要求保留原方法与请求体,这正是它相对 302 的存在意义。 |
| 308 Permanent Redirect | 永久重定向(保留方法) | 永久 | 保留 | 保留 | 是 | 规范明确要求保留原方法与请求体,是 301 的「不改写方法」版本。 |
容易搞混的状态码:401 和 403、404 和 410、400 和 422
下面每一组都给出「区别一句话」和「该用哪个」。选错状态码的代价不只是不优雅:客户端的重试策略、CDN 的缓存策略、 监控的告警规则都是按状态码分流的,用错一个码,这三层会同时做出错误决策。顺带回答两个高频问题: 301和302哪个好,要看是不是永久搬家,永久用 301、临时用 302,没有哪个天然更好;304缓存指的是协商缓存命中, 服务端只回一个空的 304 让你继续用本地副本,省下的是正文的传输量而不是那一次往返。
| 对照组 | 区别一句话 | 该用哪个 |
|---|---|---|
| 401和403的区别 | 401 是还没通过身份认证,403 是认证过了但没有权限。 | 没登录或 token 过期用 401 并带 WWW-Authenticate;已登录但权限不够用 403。 |
| 404和410的区别 | 404 是现在找不到,410 是曾经有、已被永久删除。 | 确知永久下线用 410,让搜索引擎更快取消收录;不确定就用 404。 |
| 400和422的区别 | 400 是根本解析不了,422 是能读懂但语义校验不通过。 | 语法错、缺字段用 400;业务规则不满足用 422,或者全项目统一只用 400。 |
| 409和412的区别 | 409 是业务状态冲突,412 是条件请求头没通过。 | 并发改同一份数据用 409;带 If-Match 做乐观锁失败用 412。 |
| 502和503的区别 | 502 是网关转发的上游坏了,503 是这台服务自己声明不可用。 | 上游挂了或返回无效响应是 502;自身过载、熔断、维护中用 503。 |
| 502和504的区别 | 502 是上游给了无效响应,504 是等上游响应超时。 | 上游直接挂掉是 502;上游还在算但超过网关超时是 504。 |
| 429和503的区别 | 429 是针对某个调用方的限流,503 是整体不可用。 | 限流用 429 并带 Retry-After;维护或过载整体拒绝用 503。 |
| 301和302的区别 | 301 是永久跳转并会转移权重,302 是临时跳转、权重不转移。 | 域名或路径永久搬家用 301;活动页、登录跳转这类临时切换用 302。 |
| 307和308的区别 | 两者都保留原方法与请求体,307 是临时、308 是永久。 | 接口地址临时切换用 307,永久迁移用 308。 |
| 303和302的区别 | 303 是规范要求改成 GET,302 的方法改写属于历史既成事实。 | POST 之后跳结果页用 303,普通临时跳转用 302。 |
| 304是什么意思 | 304 不是重定向,是条件请求命中缓存、内容没变。 | 静态资源刷新时返回 304 属于正常,不需要处理。 |
常见 HTTP 状态码是什么意思(403、429、499 等单码速答)
状态码什么意思,很多时候只需要一句话。下面把最常被搜到的单个码各给一句结论,想看出现场景、常见原因与两侧排查步骤, 在上方输入框里查对应数字即可。网页打不开状态码看不到时,可以打开开发者工具的网络面板;日志里的状态码 (尤其是 nginx日志状态码)在请求行引号之后;curl 查看状态码含义时,用 curl -i 把响应头首行一起打出来最省事。
| 你在搜的问题 | 一句话结论 |
|---|---|
| 403 forbidden是什么意思 | 服务端知道你是谁但不允许你做这件事,重新登录通常没用,先确认权限、文件目录权限或 WAF 规则。 |
| 500错误怎么解决 | 服务端抛了未捕获异常,答案在应用日志的堆栈里;调用方只能确认请求合法并把请求 id 交出去。 |
| 502 bad gateway是什么 | 网关连上了上游但上游返回无效响应或已挂掉,发布重启的那几秒最容易出现。 |
| 502怎么解决 | 先确认上游进程还活着、端口在监听,再查反向代理的上游地址与健康检查;发布时用就绪探针再切流量。 |
| 504网关超时 | 网关等上游响应超时,根因是上游太慢;优化慢查询或把长任务改成异步,而不是一味调大超时。 |
| 401 unauthorized | 短语叫 Unauthorized,实际是未认证:没带 token、token 过期或签名不对,服务端应带 WWW-Authenticate。 |
| 405 method not allowed | 路径存在但方法不对,服务端必须用 Allow 头列出允许的方法;跨域时多半是 OPTIONS 预检没放行。 |
| 408请求超时 | 服务端等你把请求发完等太久,主动断开;弱网上传大文件或空闲长连接被回收时常见,可安全重试。 |
| 409冲突 | 请求没写错,但和资源当前状态冲突,比如版本号对不上或唯一值被占用,要先取最新状态再操作。 |
| 410已删除 | 资源曾经有、已被永久删除,比 404 多给了一个确定信息,搜索引擎会更快取消收录。 |
| 413请求体过大 | 请求体超过服务端或网关上限,Nginx 默认只放行 1MB,调 client_max_body_size 并逐层检查网关。 |
| 415不支持的媒体类型 | Content-Type 与请求体实际格式不符或缺失,发 JSON 忘了声明 application/json 是最常见的原因。 |
| 422状态码 | 格式解析没问题但语义校验不通过,比如金额为负、日期在未来;和 400 的边界由团队统一约定。 |
| 429请求过多 | 触发了限流,按 Retry-After 等待后再试,没有该头就指数退避,绝不要原地立刻重试。 |
| 431状态码 | 请求头太大,多半是该域名下 Cookie 攒太多或长 token 塞进了自定义头,清 Cookie 往往立刻恢复。 |
| 451状态码 | 因法律原因不可用,比如版权下架或监管要求,不是技术故障,重试和换客户端都没用。 |
| 444状态码 | Nginx 的内部指令:直接关闭连接、一个字节都不返回,只出现在日志里,常用于静默丢弃恶意请求。 |
| nginx 499 | 客户端在服务端返回之前先断开了连接,成片出现说明后端太慢或客户端超时太短,要查后端耗时。 |
| 521错误 | Cloudflare 连不上源站且被明确拒绝,多为源站服务没在跑或防火墙挡了回源 IP 段。 |
| 524超时 | Cloudflare 连上了源站但没等到完整响应,本质是网关超时,把长任务改成异步最有效。 |
| 525 ssl握手失败 | Cloudflare 与源站之间的 TLS 握手没谈成,多为源站证书缺失、过期或协议版本过旧。 |
| 526错误 | 严格模式下源站证书校验不通过:自签、过期、域名不符或中间证书链没配全。 |
| 530错误 | Cloudflare 自身或 Workers 出错,页面上跟着的那个 1xxx 号才是真正的排查线索。 |
| 419页面过期 | Laravel 的 CSRF 令牌失效,刷新页面拿到新令牌再提交即可,和服务器故障无关。 |
| 420状态码 | 早期 Twitter API 表示限流的写法,现已被标准的 429 取代,当限流处理即可。 |
| 509带宽超限 | 虚拟主机面板常用的非标准码,站点这个周期的流量配额用完了,升级套餐或加 CDN 分担。 |
英文资料里的 HTTP status codes、status code list、404 Not Found meaning、500 Internal Server Error meaning、 HTTP status code cheat sheet 指的都是同一件事:一张按状态码分类整理的对照表。本页就是它的中文版本, 而且额外给出了出现场景与两侧排查步骤。
「HTTP 200 但业务失败」为什么是反模式
很多接口无论成功失败都返回 200,把真正的结果藏在响应体里,例如 {"code":-1,"msg":"没登录"}。 这样写调用起来似乎更省事,代价却分摊在整条链路上:
- 监控与告警按状态码统计错误率,全是 200 意味着接口挂了也不会报警。
- CDN 与浏览器会按 200 的缓存规则把一个「失败响应」缓存下来,用户刷新也拿不到正确结果。
- 客户端库和网关的重试策略认状态码,200 一律不重试,真正该退避重试的场景反而被跳过。
- 登录态失效这类问题拿不到 401,前端只能靠约定的 code 值去猜,多一个团队就多一套约定。
迁移建议是渐进的:先在网关或框架层给新接口用对状态码(参数错 400、未登录 401、无权限 403、限流 429、服务端异常 500), 同时保留响应体里的业务错误码给老客户端;等调用方都升级完,再把老接口的 200 兜底去掉。
非标准状态码是谁定义的:Cloudflare、Nginx、IIS 与 AWS
下面这些码不在 IANA 的注册表里,是各家产品自己定义的。搜「499 状态码」「520 错误」「cloudflare 520」这类问题时, 最容易踩的坑就是拿 RFC 去解释它们。本站按厂商分组收录了 26 个非标准码,含义以各厂商官方文档为准,可能随产品调整变化。
Laravel 定义的状态码(1 个)
| 状态码 | 中文名 | 含义 |
|---|---|---|
| 419 Page Expired | 页面已过期 | Laravel 框架用来表示 CSRF 令牌已经失效,通常是页面开太久或会话过期,属于框架自定义的码。 |
Twitter 定义的状态码(1 个)
| 状态码 | 中文名 | 含义 |
|---|---|---|
| 420 Enhance Your Calm | 请冷静一下 | 早期 Twitter API 用来表示限流的非标准码,语气俏皮,如今已经被标准的 429 取代。 |
Microsoft IIS 定义的状态码(3 个)
| 状态码 | 中文名 | 含义 |
|---|---|---|
| 440 Login Time-out | 登录超时 | IIS 用来表示会话已经超时、需要重新登录的非标准码,常见于 Exchange 和 SharePoint 这类微软系应用。 |
| 449 Retry With | 补充信息后重试 | IIS 的非标准码:这次请求缺少必要信息,服务端希望客户端补齐之后再发一次同样的请求。 |
| 451 Redirect | 重定向(IIS 扩展) | 微软在 Exchange ActiveSync 里用 451 表示「你该换一台服务器了」,和 RFC 7725 的法律原因毫无关系。 |
Nginx 定义的状态码(6 个)
| 状态码 | 中文名 | 含义 |
|---|---|---|
| 444 No Response | 不返回任何响应 | Nginx 的内部指令:直接关闭连接、一个字节都不返回,只会出现在日志里,客户端永远收不到它。 |
| 494 Request Header Too Large | 请求头过大(Nginx) | Nginx 内部使用的码,表示请求头超过了缓冲区大小,对外通常会被转换成标准的 400 返回。 |
| 495 SSL Certificate Error | 客户端证书错误 | Nginx 在双向认证场景下的内部码:客户端提供的证书本身有问题,比如格式不对或者签发者不受信任。 |
| 496 SSL Certificate Required | 需要客户端证书 | Nginx 内部码:服务端要求双向认证,但客户端一张证书都没提供,握手因此没法继续。 |
| 497 HTTP Request Sent to HTTPS Port | 把明文请求发到了 HTTPS 端口 | Nginx 内部码:客户端用明文 HTTP 访问了一个监听 HTTPS 的端口,协议对不上,握手自然失败。 |
| 499 Client Closed Request | 客户端主动断开 | Nginx 记录的非标准码:服务端还没来得及返回,客户端就先把连接断了,所以这条响应根本没发出去。 |
AWS ELB 定义的状态码(4 个)
| 状态码 | 中文名 | 含义 |
|---|---|---|
| 460 Client Closed Connection | 客户端提前关闭连接 | AWS 负载均衡记录的非标准码:负载均衡还没来得及把响应发送完整,客户端就先把这条连接断开了。 |
| 463 Too Many IPs in X-Forwarded-For | X-Forwarded-For 里 IP 过多 | AWS 负载均衡的非标准码:请求的 X-Forwarded-For 头里 IP 数量超过了上限,通常是代理层套得太多。 |
| 464 Incompatible Protocol Versions | 协议版本不兼容 | AWS 负载均衡的非标准码:客户端与后端目标组之间的协议版本不匹配,请求没法正常转发。 |
| 561 Unauthorized (ELB) | 身份认证失败(ELB) | AWS 负载均衡在内置身份认证环节出错时记录的非标准码,表示与身份提供方交互失败。 |
Esri ArcGIS 定义的状态码(1 个)
| 状态码 | 中文名 | 含义 |
|---|---|---|
| 499 Token Required | 需要令牌 | Esri 的 ArcGIS Server 用 499 表示请求缺少访问令牌,和 Nginx 那个「客户端断开」完全是两回事。 |
Apache/cPanel 定义的状态码(1 个)
| 状态码 | 中文名 | 含义 |
|---|---|---|
| 509 Bandwidth Limit Exceeded | 带宽超限 | 虚拟主机面板常用的非标准码:站点这个周期的流量配额已经用完,主机商暂时停止对外服务。 |
Cloudflare 定义的状态码(9 个)
| 状态码 | 中文名 | 含义 |
|---|---|---|
| 520 Web Server Returned an Unknown Error | 源站返回了未知错误 | Cloudflare 的兜底错误码:源站返回了它无法理解的响应,比如空响应、超大响应头或者违反协议的内容。 |
| 521 Web Server Is Down | 源站拒绝连接 | Cloudflare 连不上源站:连接被直接拒绝,通常是源站服务没在跑,或者防火墙把回源 IP 挡住了。 |
| 522 Connection Timed Out | 回源连接超时 | Cloudflare 在与源站建立 TCP 连接的阶段就超时了,握手根本没完成,请求也就没发出去。 |
| 523 Origin Is Unreachable | 源站不可达 | Cloudflare 根本找不到通往源站的路,多半是 DNS 记录里的源站地址写错了或者已经失效。 |
| 524 A Timeout Occurred | 源站响应超时 | Cloudflare 连上了源站,但在超时时限内没等到完整响应,于是主动断开,本质和标准的 504 是一回事。 |
| 525 SSL Handshake Failed | SSL 握手失败 | Cloudflare 与源站之间的 TLS 握手没谈成,通常是源站证书配置有问题或者双方协议版本对不上。 |
| 526 Invalid SSL Certificate | 源站证书无效 | Cloudflare 在严格模式下校验源站证书失败:证书过期、域名不符、链不完整或者由不受信任的机构签发。 |
| 527 Railgun Error | Railgun 链路错误 | Cloudflare 与源站之间的 Railgun 加速链路出错;该产品已经停用,这个码如今基本只有历史意义。 |
| 530 Cloudflare Error | Cloudflare 侧错误 | Cloudflare 自身或 Workers 出错时返回,通常还会跟着一个真正说明问题的 1xxx 号内部错误码。 |
接口该返回什么状态码(restful 状态码规范与 api 状态码设计)
接口应该返回什么状态码?状态码怎么选?从「我要表达什么」出发比从码表往回套更快。下表是选码助手的完整清单: 每条给出推荐码、必带响应头、一句理由和常见的错误做法,可以直接当作团队接口规范的起点。 最常被问到的三条先说结论:创建成功返回什么状态码——201 并带 Location;删除成功返回什么状态码——204,没有响应体; 限流返回什么状态码——429 并带 Retry-After。
| 我要表达 | 推荐 | 必带响应头 | 为什么 | 常见错误做法 |
|---|---|---|---|---|
| 创建成功,返回了新资源 | 201 | Location | 201 明确表示「新资源已经建好了」,Location 头告诉客户端新资源的地址,省掉一次查询。 | 一律返 200,客户端拿不到新资源地址,只能自己猜或者再查一次列表。 |
| 已受理,任务还在异步处理 | 202 | — | 202 表示「收下了但还没做完」,适合转码、导出、批量任务这类要轮询结果的接口。 | 返 200 让客户端以为已经完成,用户刷新半天看不到结果。 |
| 删除成功,没有返回体 | 204 | — | 204 表示处理成功且响应体为空,客户端不必再去解析一个空 JSON。 | 返 200 加一个空 body 不算错,但 204 更准确,也省掉一次无意义的解析。 |
| 参数缺失或格式不对 | 400 | — | 400 表示请求本身就不合法,服务端根本没法正常解析,客户端必须改请求再来。 | 返 200 加 {"code":-1},监控、网关和重试策略全都会把它当成功。 |
| 没登录,或 token 过期 | 401 | WWW-Authenticate | 401 表示「你是谁我还不知道」,WWW-Authenticate 告诉客户端该用哪种方式认证。 | 用 403 表示未登录,客户端无法区分「去登录」和「换个账号也没用」。 |
| 已登录,但这个人没有权限 | 403 | — | 403 表示身份没问题、权限不够,客户端再怎么重新登录也没用,应当提示联系管理员。 | 用 401 表示没权限,前端会把用户踢去重新登录,登录完还是做不了。 |
| 资源不存在 | 404 | — | 404 表示按这个地址找不到资源,不承诺它以前有没有、以后会不会有。 | 返 500 把「查不到」当成异常,监控会被无意义的错误率淹没。 |
| 资源曾经有,已经永久删除 | 410 | — | 410 比 404 多给了一个信息:别再来了。搜索引擎收到 410 会更快取消收录。 | 一律返 404,丢掉「已永久删除」这个信息,旧链接还会被反复抓取。 |
| 路径对,但这个方法不支持 | 405 | Allow | 405 配 Allow 头列出允许的方法,客户端一眼看出该用 GET 还是 POST。 | 返 404,让调用方以为路径写错了,白白排查半天。 |
| 并发冲突、版本对不上 | 409 | — | 409 表示请求本身合法,但和资源当前状态冲突,客户端拿到最新状态后可以重试。 | 返 400,客户端会以为是自己参数写错了,反复改参数也没用。 |
| 条件请求的前置条件不满足 | 412 | — | 412 专门回应 If-Match / If-Unmodified-Since 这类条件头,是乐观锁的标准做法。 | 返 409 混着用,客户端分不清是业务冲突还是条件头没通过。 |
| 格式解析没问题,但语义校验不通过 | 422 或 400 | — | 422 表示内容能读懂但通不过业务校验;只用 400 也完全可以,团队统一约定比纠结更重要。 | 同一个项目里 400 和 422 混着用,还没有文档说明边界。 |
| 触发限流,请稍后再来 | 429 | Retry-After | 429 明确表示是限流而不是故障,Retry-After 告诉客户端等多久,能显著降低无效重试。 | 返 503 或者直接断开连接,客户端只会立刻重试,把限流压得更严。 |
| 维护中 / 整体不可用 | 503 | Retry-After | 503 表示这台服务自己暂时不提供服务,配 Retry-After 后搜索引擎也不会急着降权。 | 返 500,让人以为代码抛异常了;或者直接返 200 加一张维护页,搜索引擎会收录它。 |
这些不是 HTTP 状态码(浏览器网络错误与 gRPC 编号)
在 Chrome 里看到的 ERR_CONNECTION_RESET、DNS_PROBE_FINISHED_NXDOMAIN 这类提示不是状态码, 它们发生在拿到 HTTP 响应之前——连接没建立、域名没解析、证书没通过,服务器根本还没来得及回一个状态码。 下面是最常见的对照说明,本页不把它们做成第二个字典。
| 错误提示 | 它其实是什么 | 排查方向 |
|---|---|---|
| ERR_CONNECTION_REFUSED | TCP 连接被对方拒绝,服务根本没监听这个端口。 | 确认端口、确认服务在跑,再看防火墙和安全组有没有放行。 |
| ERR_CONNECTION_RESET | 连接建立后被对方或中间设备强行断开。 | 看服务端有没有崩溃重启,以及中间的负载均衡、代理是否设置了过短的超时。 |
| ERR_CONNECTION_TIMED_OUT | 连接一直没建立起来,握手阶段就超时了。 | 先 ping 和 telnet 通不通,再看是不是被安全组或运营商拦截。 |
| ERR_NAME_NOT_RESOLVED | 域名没解析出 IP,请求还没发出去。 | 检查域名拼写与 DNS 解析记录,换一个 DNS 再试。 |
| DNS_PROBE_FINISHED_NXDOMAIN | 同样是域名解析失败,Chrome 的另一种说法。 | 域名可能过期、解析记录被删,或者本机 hosts 写错了。 |
| ERR_CERT_DATE_INVALID | HTTPS 证书过期或本机时间不对,TLS 握手就没通过。 | 先看服务端证书有效期,再看本机系统时间是否正确。 |
| ERR_SSL_PROTOCOL_ERROR | TLS 握手失败,双方协议或加密套件谈不拢。 | 检查服务端 TLS 版本与套件配置,老客户端可能不支持新协议。 |
| ERR_TOO_MANY_REDIRECTS | 跳转绕成了环,浏览器主动放弃。 | 沿着每一跳的 Location 看一遍,多半是 www 与非 www、HTTP 与 HTTPS 互相跳。 |
| CORS 报错(No Access-Control-Allow-Origin) | 请求其实成功了,是浏览器按同源策略拦下了响应,所以脚本读不到状态码。 | 在开发者工具的网络面板里看真实状态码,跨域头要由服务端配置。 |
| ERR_BLOCKED_BY_CLIENT | 请求被浏览器扩展(广告拦截、隐私插件)拦截了。 | 开无痕窗口或禁用扩展再试一次即可确认。 |
| ERR_EMPTY_RESPONSE | 连上了但对方一个字节都没返回。 | 看服务端进程是不是在处理中崩溃了,日志里通常有堆栈或 OOM 记录。 |
| gRPC / WebSocket 关闭码 | gRPC 是 0–16 的另一套状态枚举,WebSocket 关闭码是 1000–4999,都和 HTTP 状态码不是一回事。 | 按各自协议的文档查,不要拿 HTTP 状态码表去对号入座。 |
为什么本页不能测某个网址的状态码
这是有意的设计,不是能力缺口。浏览器的同源策略不允许页面去读取另一个站点的响应,要绕过它就必须有一个服务端代理替你发请求; 本站一期是纯前端站点,没有这样的后端,而且「替用户去访问任意网址」本身就属于对外探测行为。 所以本页只做一件事:解释状态码。你输入的日志、网址、响应头都留在你的浏览器里。
想知道某个网址真实返回了什么状态码,有两条不依赖本站的路径:一是打开浏览器开发者工具的网络面板, 刷新页面后在请求列表里直接看 Status 列;二是去服务端看访问日志,日志行里请求行引号之后的那个三位数就是状态码。 拿到之后把那一行粘进本页的粘贴解析,就能得到中文含义、出现场景和两侧排查步骤。
HTTP 状态码数据来源与更新说明
状态码数字、英文短语与注册状态以 IANA 的 HTTP 状态码注册表为准,语义定义以 RFC 9110、RFC 9111 及各专项 RFC 为准; 非标准码以 Cloudflare、Nginx、Microsoft、AWS、cPanel 等厂商官方文档的公开说明为准,条目上都标了归属。 中文说明、出现场景与两侧排查步骤全部由本站原创撰写。非标准状态码的含义以各厂商官方文档为准,可能随产品调整变化; 排查步骤是常见方向的整理,具体以你的服务端日志为准。数据版本 2026.08,更新于 2026-08, 半年复核一次,遇到注册表增删或厂商文档调整时触发式修订。