Chromium 将 No‑Vary‑Search 添加到 HTTP 磁盘缓存中,实现查询参数缓存去重
ReactNode.jsDevOps
发生了什么
- Chromium 已将 No‑Vary‑Search 支持扩展到 HTTP 磁盘缓存(现在在稳定的 Chrome 版本中)。当响应携带 No‑Vary‑Search 头时,浏览器可以重用仅在指定查询参数上有所不同的 URL 的缓存磁盘条目,而不是重新获取完整资源。
这对全栈团队的重要性
- 实际页面加载被去重。仅因分析/跟踪参数(utm_*、gclid、fbclid 等)而不同的页面可以从磁盘缓存中提供,显著加快导航速度并降低用户的网络/CPU 成本。
- 更好的预取/预渲染重用。之前的预取/预渲染重用受到限制;磁盘缓存意识使得投机性获取更常见。
- 降低源服务器/CDN 负载和延迟。更少的缓存未命中意味着更少的源请求和更少的重新验证——这对高流量端点有利。
- 客户端重度页面的行为风险。如果您的单页应用或客户端渲染依赖于首次绘制时存在搜索参数,则在 No‑Vary‑Search 下提供的预渲染或缓存响应可能在激活之前暴露不同的 URL/参数——您必须确保客户端代码在激活时更新。
立即的实用检查清单(高影响步骤)
- 审计查询参数
- 清点您的应用接收的所有查询参数。分类为:(a)影响服务器(必须变化缓存),(b)仅影响客户端(可以忽略),(c)不可预测/不安全。
- 从保守的头开始
- 使用显式参数:No‑Vary‑Search: params=("utm_source" "utm_medium" "utm_campaign" "fbclid" "gclid")
- 或仅在完全理解服务器行为的情况下使用键顺序或其他变体。
- 在源服务器(或 CDN 边缘)添加头
- 示例(概念性):
- Express: res.setHeader('No‑Vary‑Search', 'params=("utm_source" "utm_medium")')
- Nginx (add_header) / CDN 自定义头规则
- 优先选择边缘/CDN 配置,以尽可能避免源服务器的更改。
- 示例(概念性):
- 在广泛推出之前进行彻底测试
- 验证对于仅在被忽略的参数上有所不同的 URL,提供的资源是相同的。
- 测试预渲染/预取和导航流程:确保依赖于 URL 参数的客户端逻辑在激活后运行(或重新读取参数)。
- 确认分析工具仍能捕获正确的最终 URL/参数(激活可能会更改位置)。
- 监控缓存和源指标
- 在部署后跟踪缓存命中率、源请求率以及任何与缓存相关的 304/验证流量。
- 考虑 CDN 和中介行为
- 并非所有 CDN 或中介都理解 No‑Vary‑Search。如果您依赖下游缓存,请与 CDN 支持协调或谨慎使用源/边缘头。
- 推出策略
- 对一部分用户或路径进行 Canary 测试头,并在指标验证预期行为后逐步增加。
测试提示
- DevTools 网络面板:使用不同的查询参数进行加载,并检查“磁盘缓存”作为资源来源。
- 如果您依赖于预取,请重现预渲染/使用投机规则:确保激活产生正确的应用状态。
- 使用服务器日志确认响应相同,并检测真正变体内容的意外重用。
风险和注意事项
- 错误地将参数标记为可忽略可能会提供错误内容(尤其是对于查询参数改变服务器响应的页面)。
- 客户端水合时机:在初始绘制时读取搜索参数的客户端代码可能在激活之前运行,当重用预渲染/缓存页面时——更新代码以处理激活事件并在必要时重新读取参数。
- 浏览器覆盖:目前此行为在 Chromium 浏览器中实现;其他浏览器可能表现不同。在未检查浏览器支持的情况下,不要假设普遍行为。
底线 No‑Vary‑Search 进入 HTTP 磁盘缓存是一个实用的、高杠杆的变化:在保守使用时,它减少了冗余下载并改善了真实用户的性能。将其视为源/CDN/工程推出项目——清点参数,测试客户端在预渲染/激活时的行为,并逐步增加。
来源:Chrome 发布说明 — Chrome 141:对 HTTP 磁盘缓存的 No‑Vary‑Search 支持。
继续阅读
Svelte 5.52.0 为 {@html} 增加 TrustedHTML 支持,实现更安全的 Trusted Types 集成
2026年2月21日Svelte 5.52.0(2026年2月18日)为 {@html} 表达式添加 TrustedHTML 支持,使应用能够在不进行字符串强制转换的情况下与浏览器的 Trusted Types 互操作——对 SSR 和客户端渲染的应用来说,XSS 防护很重要。
Next.js 16 使 Turbopack 成为开发和构建的稳定默认选项
2026年2月20日Next.js 16 将 Turbopack 调整为稳定/默认,提升对 Node.js 的最低版本要求,并发布面向生产的缓存原语——全栈团队现在必须改变的事项。
Vite 8.0.0‑beta.14 增加服务器端 .wasm?init(WASM 服务器端渲染)并将 Rolldown 更新至 1.0.0‑rc.4
2026年2月19日Vite 的 2026 年 2 月 12 日测试版引入对预初始化 WebAssembly 模块的 SSR 支持,并将打包器集成升级至 Rolldown 1.0.0‑rc.4——这是一项实用的变更,能够减少客户端 hydration 的工作量并提升 Wasm 密集型服务器渲染的工具链稳定性。