apache中配置http/2服务器推送需启用mod_http2模块并使用h2pushresource指令声明绝对路径资源,必须开启h2push on、使用https及有效证书,推送流与主响应同步抵达,chrome devtools中initiator为“push”即生效。

Apache 中配置 HTTP/2 服务器推送,核心是启用 mod_http2 模块并使用 H2PushResource 指令声明要推送的资源路径。它不是靠前端或响应头“模拟”,而是由服务器在响应 HTML 的同时,真正发起一个独立的推送流(push stream),资源直接随主响应抵达浏览器。
前提条件:确保 HTTP/2 已就绪
Server Push 只能在 HTTPS 下工作(HTTP/2 不支持明文),且需满足:
- Apache 版本 ≥ 2.4.32(推荐 2.4.53+)
- 已启用
mod_ssl和mod_http2(通常需手动加载) - 使用支持 ALPN 的 OpenSSL(如 1.0.2+ 或 1.1.1+)
- 虚拟主机已配置有效的 TLS 证书
关键配置:H2PushResource 指令
在虚拟主机(<virtualhost></virtualhost>)或目录上下文中添加:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
H2Push on H2PushResource "/style.css" H2PushResource "/js/app.js" H2PushResource "/images/logo.svg"
注意几点:
- 路径必须是相对于
DocumentRoot的绝对路径(如/style.css),不能带查询参数(/style.css?v=2无效) - 资源文件必须真实存在、可被正常 GET 访问(否则推送失败,浏览器收不到)
-
H2Push on必须开启,否则所有H2PushResource被忽略 - 不支持通配符或正则,每个资源需单独写一行
验证是否生效
打开 Chrome DevTools → Network 面板,刷新页面后筛选 Initiator 列为 “Push” 的请求项。这些条目表示资源由服务器主动推送而来,而非浏览器发起的请求。若看到 style.css 的 Initiator 是 Push,说明配置成功。
注意事项与常见误区
Server Push 并非“越多越好”,实际使用中需谨慎:
- 推送大文件(如 >100KB 的 JS/CSS)可能拖慢首字节时间(TTFB),尤其在高并发场景下
- 不要推送用户未必访问的资源(例如后台管理页的 CSS 推给首页用户)
-
Link: rel=preload响应头 ≠ Server Push,它只是浏览器预加载提示,不占用 HTTP/2 推送流 - Nginx 官方版本不原生支持语义正确的 Server Push,别误用
http2_push(该指令仅对静态文件有效,且行为受限)










