面试题库 词条目录
前端Wiki/面试题库/HTTP 与浏览器/HTTP 高频题

HTTP 状态码与缓存策略

状态码按首位分类:1xx 信息、2xx 成功、3xx 重定向 / 缓存、4xx 客户端错、5xx 服务端错。高频码:200 成功、204 无内容、301 永久重定向(会被缓存,慎用)、302 临时重定向、304 命中协商缓存、400 参数错、401 未认证、403 无权限、404 不存在、500 服务端错、502 网关错、504 超时。

缓存策略是这道题的真正考点,分两级:强缓存(Cache-Control: max-age / max-age 与 no-cache)由浏览器直接判断,命中时连请求都不发;协商缓存(协商字段 Last-Modified / ETag + If-None-Match)要问服务器,命中返回 304。口诀:“强缓存不说话,协商缓存问一句,304 是命中”。

  • 五位分类:2 成功 3 重定向 4 客户端错 5 服务端错;304 是协商缓存命中
  • 强缓存:Cache-Control: max-age,命中不发请求;no-cache 表示“每次都要问”
  • 协商缓存:ETag 优先于 Last-Modified,命中返回 304 复用本地副本
HTML
<!-- 服务端响应头示例(nginx / node 都一样) -->
<!-- 强缓存:10 秒内浏览器直接用本地副本,连请求都不发 -->
<pre>HTTP/1.1 200 OK
Cache-Control: max-age=10, public
Date: Wed, 04 Nov 2026 08:00:00 GMT</pre>

<!-- 协商缓存:10 秒后请求带上指纹问服务器 -->
<pre>GET /app.js
If-None-Match: "abc123"          ← 上次服务器给的 ETag

HTTP/1.1 304 Not Modified         ← 没变,继续用本地副本</pre>

<!-- HTML 经典策略:入口文件不缓存,静态资源长缓存 -->
&lt;link rel="stylesheet" href="style.css?v=20261104"&gt;
&lt;script src="app.[hash].js" defer&gt;&lt;/script&gt;
<style>
  .demo { border: 1px dashed #999; padding: 12px; font-family: monospace; white-space: pre-wrap; }
</style>
<div class="demo">Cache-Control: max-age=31536000, immutable  ← 带哈希的资源缓存一年
Cache-Control: no-cache, must-revalidate            ← HTML 入口每次都问</div>
本节要点缓存两段式:强缓存(max-age,不问)→ 协商缓存(ETag,问 304);入口 no-cache + 资源 hash 是工程标配。