常见 HTTP 状态码和重定向有哪些容易混淆的地方?
先理解原理和示例,再练习完整口述与追问。
回答要点
204/304 无响应内容;401 与 403 区分认证和拒绝;301/302 与 307/308 的方法保留不同;429 尊重 Retry-After。
原理拆解
200 表示成功,201 常用于创建资源,204 表示成功但没有响应内容,客户端不能无条件对它调用 response.json。304 用于条件请求命中缓存,客户端继续使用已有表示,不是服务器重新返回一份完整业务 JSON;缺少可用缓存时也不能把它当普通成功数据处理。
401 表示缺少有效身份认证,通常要结合 WWW-Authenticate 和登录或刷新流程;403 表示服务器理解请求但拒绝执行,不能看到 403 就无限刷新 token。404 是资源未找到;409 常用于状态冲突;429 是限流,应结合 Retry-After 和退避;500 表示服务端内部错误,502 常表示网关收到无效上游响应,503 表示暂时不可用,504 表示网关等待上游超时。
301 是永久重定向、302 是临时重定向;历史浏览器在某些情况下可能把 POST 改成 GET。303 明确引导客户端改用检索请求,常用于提交后跳转。307、308 分别是临时、永久重定向,并要求保留方法和请求体。跳转登录时要防止不可信 returnUrl 导致开放重定向;跨域重定向还可能影响凭据和请求头,不能只看 Location 就认定原请求能原样继续。
示例与推演
表单 POST 成功后返回 303,引导浏览器 GET 结果页,可避免刷新重复提交的常见问题。需要临时迁移同一 POST 方法与请求体可使用 307;永久保留方法则是 308。204 和 304 都没有普通 JSON 响应内容,统一响应解析层必须按协议分支处理。
易错点
前端不应把所有非 200 都当登录过期。fetch 对 404、500 通常仍 resolve 一个 Response,需要检查 ok/status。
参考回答可直接练习口述
200 表示成功,201 常用于创建资源,204 表示成功但没有响应内容,客户端不能无条件对它调用 response.json。304 用于条件请求命中缓存,客户端继续使用已有表示,不是服务器重新返回一份完整业务 JSON;缺少可用缓存时也不能把它当普通成功数据处理。