服务器已经配置好:
server {
# listen在原https配置文件基础上添加http2
listen 443 ssl http2;
# 添加一句http2_push_preload on表示开启server push功能
http2_push_preload on;
……
}
并且用以下的方式(php)也成功了:
<?php
header("link: </styles.css>; rel=preload; as=style", false);
header("link: </script.js>; rel=preload; as=script", false);
但是据说还可以用link标签的方式来指定要推送的资源:
<link rel="preload" href="/styles.css" as="style">
<link rel="preload" href="/script.js" as="script">
但我一直没试成功这种方式,有人知道这是什么问题吗?
两种写法的作用域不一样:
已经输出了html内容, 这个时候浏览器已经可以自己解析link/script了, 干嘛还要用server push呢?
nginx能很容易获取到header, 却不容易解析html
所以, nginx后面需要有个能设置header的服务器, php或者其它语言的, 可以设置一个header, 然后nginx再根据header中的hints规则进行资源的push