不会。rel="preload"是浏览器主动发起的请求提示,与服务端push_promise帧无关;chrome 96+、firefox 90+、edge 96+已移除对server push的支持,wireshark抓到的推送帧仅是服务端单向发送,浏览器静默丢弃,不进缓存也不触发加载。

Link preload 会触发 Server Push 吗?
不会。rel="preload" 是浏览器端主动发起的请求提示,和服务端单向发送的 PUSH_PROMISE 帧完全无关。两者协议层独立:一个是 HTTP/2 多路复用下的普通请求(带高优先级),一个是已被现代浏览器静默丢弃的推送机制。
为什么 Nginx 的 http2_push 和 Link 响应头都失效了?
Chrome 96+、Firefox 90+、Edge 96+ 已移除对 PUSH_PROMISE 的解析逻辑——不是配置错,是协议支持被删了。你看到 Wireshark 抓到 PUSH 帧,只是服务端还在发;浏览器内核收到后直接跳过,不进缓存、不触发加载、Network 面板里绝不会出现 Initiator: Push。
-
http2_push /style.css;→ 白发约 150 字节 TCP 开销,纯浪费 -
Link: ; rel=preload; as=style→ 浏览器当普通响应头处理,但忽略其推送意图,只按 preload 规则执行(前提是 HTML 里没写对应<link rel="preload">) - Lighthouse 若还建议“启用 Server Push”,说明规则库未更新(截至 2026 年 5 月)
preload 标签和 Link 响应头效果一样吗?
语义和行为一致,但实现路径不同:<link rel="preload" as="style" href="/main.css"> 由 HTML 解析器触发;Link 响应头由服务端在 HTML 响应中携带,效果等同于在 里写了那行 <link>。关键约束没区别:
- 路径必须是绝对路径(
/main.css,不能./main.css或https://cdn.example.com/main.css) -
as属性不可省略,写错(如as="fetch")会导致优先级降为 Low,不参与样式解析流程 - 必须出现在
中,且早于对应的<link rel="stylesheet">或<script src></script>
真正该关心的不是“怎么推”,而是“推什么”
Server Push 已成历史,但 rel="preload" 的误用依然常见。它只对浏览器“发现太晚但首屏立刻要用”的资源有效:
- ✅ 应该预加载:
@font-face引用的.woff2、内联<style></style>里的background-image、<picture></picture>中首屏<source></source> - ❌ 不该预加载:
analytics.js、非首屏轮播图、第三方 widget——它们抢带宽,拖慢 FCP - ⚠️ as="font" 必须配
crossorigin,否则 Chrome/Safari 加载完也丢弃;as="style" 要手动加onload切换 rel 才生效
别再调试推送是否“发出”,检查 TLS 1.3 是否启用、Brotli 是否压缩、关键 CSS 是否内联,这些才是真正卡住首屏的地方。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











