HTTP状态码速查与实践:1xx-5xx分类、常见陷阱与用法

全面掌握HTTP状态码的语义与工程实践,覆盖缓存、重定向、错误处理与幂等设计

优兔GOGO
2025年10月12日
开发教程
HTTP状态码后端缓存

🧭 分类速览

  • 1xx 信息:请求已接收,继续处理(少用)
  • 2xx 成功:200 OK201 Created204 No Content
  • 3xx 重定向:301/308 永久302/307 临时304 Not Modified
  • 4xx 客户端错误:400401403404422
  • 5xx 服务器错误:500502503504

🔁 重定向正确用法

场景推荐
资源永久迁移301(或308,保持方法不变)
临时跳转302(或307,保持方法不变)
条件缓存命中304

301/302 在历史实现里可能将 POST 变为 GET;若需严格保持动词,请使用 307/308。

🧩 条件请求与缓存

If-None-Match: "etag-value"   // 命中返回 304
If-Modified-Since: Tue, 10 Oct 2025 07:28:00 GMT

后端生成 ETag/Last-Modified,命中返回 304 可大幅节省带宽与TTFB。

🧱 错误码与幂等

  • 400:参数无效;422:语义正确但处理失败(如业务校验)。
  • 401:未认证;403:已认证但无权限。
  • 404:资源不存在;410:资源已删除。
  • 幂等接口设计:重复请求不应造成副作用(PUT/DELETE天生幂等)。

🔒 安全与SEO

  • 登录跳转:未登录返回 401 而不是 200 + 登录页HTML。
  • SEO 友好:移动或删除内容,请返回对应 301/404/410。

🧪 常见后端示例

// Node.js/Express
app.post('/items', (req, res) => {
  const created = createItem(req.body);
  res.status(201).set('Location', `/items/${created.id}`).json(created);
});

app.get('/items/:id', (req, res) => {
  const item = getItem(req.params.id);
  if (!item) return res.status(404).send();
  res.json(item);
});

🔗 相关工具

需要快速查询状态码语义与分类?试试 HTTP状态码大全,支持搜索与分组浏览。