合理缓存通过强缓存(如cache-control)使浏览器本地加载静态资源,避免请求服务器;协商缓存则用etag等机制在过期后仅返回304响应,大幅减少传输与服务器压力。

合理缓存能显著降低服务器压力,核心逻辑是:让浏览器或中间节点替服务器“扛住”重复请求,把原本要发往后端的大量读操作,变成本地读取或轻量验证。
强缓存避免请求到达服务器
通过 Cache-Control: max-age=31536000(一年)或 Expires 响应头,告诉浏览器这个资源在指定时间内绝对不需要再问服务器。比如静态 JS、CSS、字体、图标等不变文件,设置长期强缓存后,用户第二次访问时,浏览器直接从磁盘加载,连 HTTP 请求都不发——服务器完全无感知。
- 关键点:资源内容不变时,配合文件哈希命名(如
app.a1b2c3.js),确保更新后 URL 变化,旧缓存自然失效 - 避免对 HTML 主文档设长缓存,否则页面逻辑更新用户可能看不到
协商缓存减少响应体传输
当缓存过期但资源大概率未变时,浏览器会发起带 If-None-Match(ETag)或 If-Modified-Since 的请求。服务器只需比对,若未修改就返回 304 Not Modified,不传资源本体——只消耗极小的头部开销(通常
- 适合 HTML、动态生成但变化不频繁的页面(如商品详情页)
- 需后端正确生成和校验 ETag 或 Last-Modified,避免始终返回 200
分层缓存放大降压效果
单靠浏览器缓存不够,要叠加多级缓存形成“防护网”:
- CDN 缓存:把静态资源部署到边缘节点,用户就近获取,流量不过源站
- 反向代理缓存(如 Nginx):配置 proxy_cache,对未命中 CDN 的请求做二次缓存,尤其适合 API 响应或 SSR 页面
- 服务端内存缓存(如 Redis):对数据库高频查询结果缓存,避免每次请求都穿透到 DB
缓存策略要匹配资源特性
不是所有资源都适合同一套缓存规则:
- 用户私有资源(如登录态接口、个人中心数据):禁用共享缓存,用 Cache-Control: private, no-store
- 公共资源但需及时更新(如活动 Banner 图):设较短 max-age(如 5 分钟),配合主动刷新机制
- 纯静态资源(logo.svg、vendor.css):max-age 设为 1 年,靠文件名版本控制更新











