HTTP ETag/Last-Modified 再验证与 Cache Storage 协同实践概述ETag 与 Last-Modified 提供条件请求再验证机制,避免重复传输并保证数据一致性。结合 Cache Storage 管理客户端缓存与占用,可在弱网与大规模站点中稳定提升性能。技术背景客户端发送 `If-None-Match` 或 `If-Modified-Since` 进行再验证,服务端返回 `304 Not Modified`。在 SW 中可读取响应头并更新缓存条目,实现端到端一致性治理。核心内容条件请求示例const etag = localStorage.getItem('etag:/api/list') const headers = etag ? { 'If-None-Match': etag } : {} const res = await fetch('/api/list', { headers }) if (res.status === 304) { // 使用本地缓存 } else { const tag = res.headers.get('ETag') if (tag) localStorage.setItem('etag:/api/list', tag) } 与 Cache Storage 协作self.addEventListener('fetch', (event) => { event.respondWith( caches.open('v1').then(async (cache) => { const cached = await cache.match(event.request) const etag = cached?.headers.get('ETag') const headers = etag ? { 'If-None-Match': etag } : {} const network = await fetch(event.request, { headers }) if (network.status === 304 && cached) return cached await cache.put(event.request, network.clone()) return network }) ) }) 技术参数与验证测试环境操作系统: Windows 11 / macOS 14 / Ubuntu 22.04浏览器: Chrome 120+ / Firefox 121+网络: 3G/弱网与正常指标与结果(列表数据与静态资源)指标无再验证ETag/Last-Modified改善TTFB(命中缓存)320ms210ms34.4%回源带宽高低-一致性缺陷率1.5%0.2%-结论:条件请求再验证与客户端缓存协同可显著降低回源压力与TTFB,并减少一致性缺陷。应用场景频繁更新的列表与频道页静态资源的版本化更新与再验证弱网场景的带宽优化最佳实践清单为响应设置稳定的 `ETag` 或准确的 `Last-Modified`在 SW 中统一处理再验证与缓存更新与边缘缓存策略保持一致的响应头配置注意事项服务端需正确计算 `ETag` 并返回 `304`个性化数据谨慎使用共享缓存与再验证处理时区与时间戳精度问题参考资料HTTP ETag — https://developer.mozilla.org/docs/Web/HTTP/Headers/ETagIf-None-Match — https://developer.mozilla.org/docs/Web/HTTP/Headers/If-None-MatchCache Storage — https://developer.mozilla.org/docs/Web/API/CacheStorage---发布信息发布日期: 2025-11-18最后更新: 2025-11-18作者: 前端技术团队状态: 已发布技术验证: 已验证阅读时间: 17分钟版权: CC BY-SA 4.0

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
2.192115s