http缓存机制有哪些?

HTTP 缓存机制是浏览器和服务端通过特定协议约定资源缓存策略的技术,目的是减少重复请求、提升加载速度。以下是常见的 HTTP 缓存机制及其核心原理:


一、强制缓存(无需向服务端验证)

浏览器直接根据本地缓存判断是否使用缓存资源,无需发送请求到服务端。

1. Cache-Control(HTTP/1.1 标准)
  • 通过响应头设置,常用指令:
    • max-age=3600:资源有效期为 3600 秒(优先级高于 Expires)。
    • public:允许代理服务器和浏览器缓存。
    • private:仅允许浏览器缓存。
    • no-cache:需协商缓存验证(不直接使用本地缓存)。
    • no-store:禁止任何缓存(完全禁用缓存)。
    • immutable:资源永不变,跳过验证(适合长期静态资源)。
2. Expires(HTTP/1.0 旧标准)
  • 通过响应头设置绝对过期时间(如 Expires: Wed, 21 Oct 2025 07:28:00 GMT)。
  • 缺点:依赖客户端和服务端时间一致,已被 Cache-Control 替代。

二、协商缓存(需向服务端验证)

当强制缓存失效时,浏览器携带验证信息向服务端发起请求,服务端决定是否返回新内容(返回 304 或 200)。

1. Last-Modified & If-Modified-Since
  • 服务端返回 Last-Modified: <时间>,表示资源最后修改时间。
  • 浏览器下次请求时携带 If-Modified-Since: <Last-Modified的值>
  • 服务端比对时间:
    • 未修改 → 返回 304 Not Modified(空 body)。
    • 已修改 → 返回 200 和新内容。
2. ETag & If-None-Match
  • 服务端返回 ETag: <唯一标识符>(如文件哈希值)。
  • 浏览器下次请求时携带 If-None-Match: <ETag的值>
  • 服务端比对标识符:
    • 一致 → 返回 304
    • 不一致 → 返回 200 和新内容。
  • 优势:比 Last-Modified 更精准(如 1s 内多次修改或内容不变但修改时间变化)。

三、缓存策略组合

1. 强缓存优先 + 协商兜底
Cache-Control: max-age=3600  # 1 小时内强制缓存
ETag: "abc123"              # 超时后通过 ETag 验证
2. 禁止缓存
Cache-Control: no-store     # 完全不缓存
3. 始终验证
Cache-Control: no-cache     # 每次请求都需协商验证

四、缓存位置

  1. Memory Cache
    • 内存缓存,快速读取,页面关闭即失效(适合小文件)。
  2. Disk Cache
    • 磁盘缓存,持久化存储(适合大文件)。
  3. Service Worker Cache
    • 通过 Service Worker 控制的离线缓存(需手动编程管理)。

五、缓存失效与更新

1. 主动更新
  • 修改 URL:通过添加哈希或版本号(如 style.v2.css)。
  • 服务端更新 ETagLast-Modified
2. 被动失效
  • 缓存时间到期(max-ageExpires)。

六、最佳实践

  1. 静态资源(JS/CSS/图片)
    • 设置长期强制缓存(如 max-age=31536000),并通过文件名哈希控制更新。
  2. 动态接口(API)
    • 使用 no-cache 或短效 max-age,配合 ETag 验证。
  3. 关键路径资源(HTML)
    • 禁用缓存或设置短效缓存(如 max-age=300)。

总结

  • 强制缓存:速度快,但需注意过期策略。
  • 协商缓存:保证资源新鲜度,但增加网络请求。
  • 组合使用:通过 Cache-ControlETag 实现性能与一致性的平衡。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值