HTTP 状态码
按码号或英文短语查状态码,附常见误用与服务器差异。
这一页把 RFC 9110 §15 与 IANA HTTP 状态码注册表里的码位整理成一张可查询的静态表:每条记录有码位、英文短语、规范出处、中文语义、常见误用、缓存属性以及「与 Nginx/CDN 的关系」一列。表内除了 100–599 的标准与临时注册码位,还单列了 440/449/499/520–526/530 这类厂商自定义段,并一律标注 non-registered 或 custom,用来把「网关产品自己的行为」和「HTTP 语义」分开——这两件事在很多排查帖里被混为一谈。查询支持四种写法混用:三位数字(404)、区间(400-410)、类别(3xx 或 4)、英文短语子串与中文说法,逗号、顿号、分号或空白分隔,一次可以写「404 301 网关」。
表是内置的,不做任何网络查询;本页不上传输入,也不发起请求,你查的每一个码位都在浏览器里对着这份常量表完成。查不到的写法进 misses,非法写法(如 999、410-400)进 bad 并给出理由,不会静默返回空表。缓存两列只按 RFC 9110 §15.1 的启发式可缓存清单逐条标注,范围之外的码位默认不可缓存,表里每条都写了原因;304 单列为 special,它不是响应状态而是条件命中后的复用标记,永远不带正文。
HTTP 状态码怎么用
- 按码位、区间或类别查:输入框里写 404、400-410、3xx、5 都行,多个写法用空格或逗号分隔;留空则按当前 scope 展示整张表,条数超过「最多行数」时会在提示条里说明截断了多少。
- 用中文说法定位:直接写「超时」「网关」「找不到」「限流」等说法,命中后会附带规范口径的说明,例如「超时」会提示 408 是服务器等客户端、504 是代理等上游。
- 关掉服务器列:「附 Nginx/CDN 差异」开关关闭后不输出最后一列,表格更窄;提示条会记录这一开关状态。
- 中文映射与英文子串怎么命中:中文说法走一张映射表,例如「未授权」映射 401 并附一条说明:中文习惯说「未授权」,但 401 的规范语义是缺凭证(§15.5.2),权限不足是 403;「网关」同时映射 502 与 504,因为两者都由中间层产生,区别在于上游给的是无效响应还是压根没在时限内给响应。英文侧按短语与说明文本匹配,「unexpected」命中 500(§15.6.1 原文 unexpected condition),「timely」命中 504(§15.6.5 原文 did not receive a timely response)。
- 两列缓存标记的完整清单:CACHEABLE_BY_DEFAULT 逐条抄自 RFC 9110 §15.1 的启发式可缓存清单:200、203、204、206、300、301、308、404、405、410、414、501;MUST_REVALIDATE 列出 407、416、500、502、503、504——这些码位即便边缘有旧条目也不能直接复用,必须回源确认。例如 451(RFC 7725)只用于法律要求的封锁,把技术故障写成 451 会削弱这个信号,也会让缓存住一个封锁结果变成额外风险。
常见问题
408、502、504 都是超时,为什么要分开
区分点在「谁在等谁」。408 Request Timeout(RFC 9110 §15.5.9)是服务器在等客户端把请求发完,等的是上游那一侧的发送方;504 Gateway Timeout(§15.6.5)是网关或代理在等上游响应,等的是下游那一侧的服务方;502 Bad Gateway(§15.6.3)不是超时,是上游给了一个无效响应——连接被重置、状态行非法、过早关闭都算。三者产生的实体也不同:408 由源站产生,502/504 由中间层产生,客户端从码位就能判断故障发生在哪一跳。Nginx 侧对应关系也很清楚:504 由 proxy_read_timeout 到期触发,日志常见 upstream timed out;502 多来自上游端口无人监听或 worker 崩溃,proxy_next_upstream 会在 error/timeout/502 时重试下一个上游。
301 和 308 都能永久重定向,该用哪个
区别在方法是否允许改变。RFC 9110 §15.4.4 允许 301 的后续请求把 POST 改成 GET,历史实现普遍就是这么做的;308 Permanent Redirect(RFC 7538)要求方法与正文都保持不变。所以「永久换地址且希望客户端继续用原方法重放」用 308,传统的站点迁移仍然普遍用 301,因为老客户端对 308 的支持不完整。两者都在 §15.1 的可缓存清单里,重定向关系会被缓存下来,改回来的难度比预期大,302 与 307 才是临时场景的选择。
418 到底算不算 HTTP 状态码
不算。RFC 9110 §15.5.19 把 418 记为 Unused:它源于 RFC 2324 那个超文本咖啡壶控制协议的玩笑,IANA 注册表里也没有分配给它。表里保留这一行并把 reg 标成 unused,是为了让你在读到旧文或某个框架的示例时知道它的来历,而不是鼓励使用。真正需要「服务器拒绝当前协议版本」这类语义时有对应码位:505 是版本不支持,426 Upgrade Required(RFC 7231 §15.5.14)要求客户端切换协议。
对应功能编号 #53无需安装,手机端同样可用按 Ctrl + K 换工具