用link标签无法实现http2的server push

服务器已经配置好:

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">

但我一直没试成功这种方式,有人知道这是什么问题吗?

阅读 1.8k
1 个回答

两种写法的作用域不一样:

  • 写在header里面, nginx一眼就能看到
  • 而写在html里面, 这是给浏览器看的

已经输出了html内容, 这个时候浏览器已经可以自己解析link/script了, 干嘛还要用server push呢?

nginx能很容易获取到header, 却不容易解析html
所以, nginx后面需要有个能设置header的服务器, php或者其它语言的, 可以设置一个header, 然后nginx再根据header中的hints规则进行资源的push

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题