Apache 的 HTTP/2 Server Push 已被弃用,因浏览器移除支持、缓存失控、带宽浪费、优先级错配且收益趋近于零;推荐改用 preload、Early Hints 等可控方案。

Apache 中 HTTP/2 的服务端推送(Server Push)功能可用于提前将关键资源(如 CSS、JS、字体、首屏图片)推送给浏览器,减少往返延迟,加快页面渲染。但需注意:该功能已从 Apache 2.4.53 起被正式弃用,官方明确建议停用;现代浏览器(Chrome 110+、Firefox 112+)也已移除对 PUSH 的支持。因此,当前不推荐配置或依赖 Server Push。
为什么不再推荐启用 Server Push
实际运行中发现多个不可控问题:
- 推送资源无法被浏览器缓存策略精准控制,易造成重复传输或缓存错乱
- 若客户端已缓存某资源,Apache 仍会盲目推送,浪费带宽和连接资源
- 推送优先级难以与浏览器加载逻辑对齐,反而可能阻塞关键请求
- HTTP/2 多路复用本身已极大缓解队头阻塞,Push 带来的边际收益趋近于零
- HTTP/3(QUIC)标准中完全移除了 Push 机制,生态已转向更可控的替代方案
更可靠、更主流的替代方案
用标准 HTML 或 HTTP 头实现等效优化,兼容性更好、行为更确定:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
使用 <link rel="preload">:在 HTML <head> 中声明关键资源,例如
<link rel="preload" href="/style.css" as="style">
<link rel="preload" href="/hero.webp" as="image"> -
HTTP Link 头预加载:在 Apache 配置中为 HTML 响应添加 Link 头
Header add Link '</style.css>; rel=preload; as=style'
Header add Link '</hero.webp>; rel=preload; as=image' - 资源内联关键 CSS/JS:将首屏必需样式直接写入 <style> 标签,避免额外请求
- 启用 Early Hints(103响应):Apache 2.4.53+ 支持,可在 HTML 主体返回前发送 103 状态及 Link 头,让浏览器尽早发起预加载(需客户端支持)
如果你仍需验证旧版 Push 行为(仅限测试环境)
仅适用于 Apache ≤ 2.4.52 + 启用 mod_http2 的 HTTPS 站点:
- 在虚拟主机配置中添加:
H2Push on
H2PushPriority * /style.css 10
H2PushPriority * /app.js 5 - 重启 Apache 后,用 curl 检查响应头是否含 link: </style.css>; rel=preload
- Chrome DevTools → Network → 右键表头 → 勾选 “Protocol” 列,观察推送资源是否标记为 “h2 push”
当前最佳实践是关闭 H2Push,专注优化 TLS 1.3、OCSP 装订、资源压缩与 preload 策略——这些措施稳定、可测、长期有效。


















