ToolBench

网页

HTTP 状态码

第一位数字就是分类:2xx 成功、3xx 跳转、4xx 客户端出错、5xx 服务端出错。调试时大部分时间其实花在判断这个 403 到底是谁的责任。

怎么用

  1. 按数字或「跳转」「超时」这类关键词过滤。
  2. 读你遇到的那个状态码的解释。
  3. 看分类,判断问题出在哪一侧。
  4. 做 API 时,401 与 403 的区别最要紧。

状态码直接影响缓存和收录

301 告诉爬虫把权重转移过去,并且不要再请求旧地址。302 让两个地址都活着。304 让浏览器直接复用缓存副本,完全跳过正文传输。这些用错不是外观问题:把永久迁移写成临时跳转,只要跳转还在,权重就一直在漏;用 200 返回一个错误页,那个错误页就会被收录。

400、401、403、422 怎么选

400 是请求本身有毛病。401 是没认证或认证失败。403 是认证过了、但没权限。422 是语法没问题但值讲不通——过去的日期、200 岁的年龄。把四者一律压成 400 是很常见的做法,代价是每个客户端的错误处理都只能靠猜。

只看状态码排查 API

401 是「我不知道你是谁」,403 是「我知道,但你不能」。两者用反,会让客户端陷入一个永远不可能成功的重新认证循环。429 应当带 Retry-After 头——没有它,客户端会立刻重试,把过载变得更糟。

网关这一侧,502 是「上游返回了不可用的东西」,503 是「现在不接流量」,504 是「上游没在时限内回应」。这三者指向完全不同的系统:一次失败的发布、一次主动摘流、一条慢查询。先看状态码再翻日志,通常能把搜索范围砍一半。

常见问题

401 和 403 到底差在哪?

401 是服务器不知道你是谁——没认证,或者 token 过期了。403 是知道你是谁但拒绝——你的角色没有权限。用同样的凭证重试 403 毫无意义。

什么时候用 301 而不是 302?

迁移是永久的、并且希望把权重传过去时用 301。临时跳转(比如发版期间的跳转)用 302。站点迁移时搞错这一点,会实打实地丢流量。

为什么有的 200 页面也显示错误?

一些 API 会返回 200 加一个错误体,这是设计失误——客户端和缓存都会当成成功。规范的做法是客户端错误用 4xx。

418 是真的吗?

它最初是 1998 年 RFC 里的玩笑,后来被后续规范保留了下来。一些服务器和框架确实会返回它,也常被拿来做彩蛋。

永久迁移该用 301 还是 302?

301。它会传递权重信号,浏览器也会缓存;302 用于临时跳转,不该被长期缓存。

API 可以用 200 返回错误内容吗?

不可以。客户端和监控都是按状态码判断的;用 200 携带错误,等于把故障藏到有人去翻日志为止。