HTTP/2 Push中rel=preload不生效:浏览器发起者显示HTML而非Push?
为什么你的CSS资源发起者是HTML而非Push?
这事儿其实是把Preload和HTTP/2 Server Push搞混啦,我给你拆解清楚:
1. Preload 不等于 Server Push
你代码里的 <link rel="preload" href="/test.css" as="style"> 只是给浏览器发了一个「提前加载这个资源」的指令——本质上还是浏览器收到HTML后,自己主动去请求这个CSS文件,所以发起者自然是HTML。
而Server Push是服务器主动把资源推送给浏览器,不需要浏览器先发起请求,这时候资源的Initiator才会显示成Push。
2. Apache需要额外配置才会开启Server Push
你用的Apache/2.4.29本身支持HTTP/2 Push,但默认不会自动识别preload标签去推送,得手动配置:
- 方法一:直接在对应页面的配置里指定要推送的资源
<Location "/test.html"> http2_push /test.css; </Location> - 方法二:开启自动识别preload标签的功能
开启这个后,服务器会扫描HTML里的preload标签,自动推送对应的资源。http2_push_preload On;
3. 验证Push是否生效的小技巧
配置完重启Apache后,打开浏览器开发者工具的Network面板:
- 如果Push成功,CSS资源的Initiator列会显示「Push」
- Size列会标注「(Push)」或者类似的标识
内容的提问来源于stack exchange,提问作者toxikas
相关产品推荐
相关产品推荐

