Skip to content

常见 HTTP 状态码怎么用? ​

2xx 表示成功,3xx 表示还要再走一步,4xx 是客户端问题,5xx 是服务器没完成。接口设计要让状态码表达结果,不要所有失败都返回 200 再在 JSON 里塞一个错误码,除非这是团队已经统一的约定并且网关认。

原理 ​

  • 200 成功并带有正文。201 已创建。204 成功但没有正文。
  • 301 永久移动,方法和正文在历史上可能被改成 GET。302 临时移动,也常被改成 GET。需要保持方法和正文时用 307(临时)或 308(永久)。
  • 304 协商缓存未修改,不是错误。
  • 400 请求语法或参数不合法。401 没认证。403 已认证但没权限。404 资源不存在。409 冲突。429 请求太多。
  • 500 服务器异常。502 网关从上游拿到了无效响应。503 暂时不可用。504 网关等上游超时。

401 和 403 不要混。没登录是 401,登录了但不能做是 403。不要用 404 隐藏所有无权限资源,除非产品明确要求不暴露资源是否存在。

追问 ​

前端要怎么分支?

先看 HTTP 状态,再解析业务正文。fetch 不会因为 4xx、5xx reject。重试只适合幂等请求和 429、503 这类暂时失败,并且要限制次数和间隔。

301 缓存在浏览器里会怎样?

永久重定向可能被浏览器记住。配错之后很难靠改服务器立刻纠正所有旧客户端。临时迁移用 302 或 307。

易错点 ​

  • 把 304 当失败。
  • 所有接口返回 200,监控和 HTTP 缓存都无法判断失败。
  • 401 和 403 互换,前端会错误地跳登录页。

相关 ​