• home > tools > webServer > nginx >

    nginx如何配置HTTP/2服务器推送(Server Push)

    Author:zhoulujun Date:

    我们都知道htt2有个服务端推送能力,可以缩短用户加载时间,但是如何应用到web开发上呢?也可以说,nginx如何配置HTTP2服务端推送呢,前端又需要做些啥呢?

    先安利下基础课:

    同类文章推荐:

    下面是内容总结:

    Nginx开启http2推送

    Nginx开启http2前提条件

    1. 必须配置https证书,RFC并用规定HTTP2一定要用https2,但是目前的浏览器都要求必须配备https

    2. nginx必须1.13.9以上

    3. nginx编译必须加上 ngx_http2_v2_module模块,可用nginx -V 查看模块情况

    4. OpenSSL 必须1.0.2版本以上,可用openssl version 查看OpenSSL版本情况

    nginx开启http2

    server {
        # listen在原https配置文件基础上添加http2
        listen 443 ssl http2;
    }

    这样,就开启http2了。浏览器请求会显示h2

    nginx开启server push

    服务端写死静态推送

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        http2_push /style.css;
        http2_push /example.png;
    }

    这种方法,更不无法用。因为页面内容不可能全部写死的

    客服端标志推送

    server {
        # listen在原https配置文件基础上添加http2
        listen 443 ssl http2;
        # 添加一句http2_push_preload on表示开启server push功能
        http2_push_preload on;
    }

    这样,服务端就可以开启推送能力,然后让客户端告知nginx 需要推送那些资源。


    标识依赖资源

    W3C候选推荐标准(https://www.w3.org/TR/preload/)建议了依赖资源的两种做法:文件内<link>标签和HTTP头部携带, 表示该资源后续会被使用, 可以预请求, 关键字preload修饰这个资源, 写法如下:

    a) 静态Link标签法:

    <link rel="preload" href="push.css" as="style">

    <link rel="preload" href="/push.css" as="style">
    <link rel="preload" href="/push.js" as="script">
    <link rel="preload" href="/push.png" as="image">
    <link rel="preload" href="https://fonts.example.com/push.woff2" as="style" type="font/woff2" crossorigin="true">

    这个适合在webpack 打包时候使用。

    b) HTTP头表示法:

    Link: <push.css>; rel=preload; as=style

    其中rel表明了资源</push.css>是预加载的,as表明了资源的文件类型。另外,link还可以用nopush修饰,表示浏览器可能已经有该资源缓存,指示有推送能力的服务端不主动推送资源,只有当浏览器先检查到没有缓存,才去指示服务端推送资源,nopush格式写成:

    Link: </app/push.js>; rel=preload; as=script;nopush
    link: </push.css>; rel=preload; as=style
    link: </push.png>; rel=preload; as=image

    当然,也可以吧link合并起来

    <?php
        header('link: </styles.css>; rel=preload; as=style, </script.js>; rel=preload; as=script, </example.png>; rel=preload; as=image, <https://fonts.example.com/font.woff2>; rel=preload; as=font; crossorigin; type="font/woff2"', false);

    这个适合在后端做



    转载本站文章《nginx如何配置HTTP/2服务器推送(Server Push)》,
    请注明出处:https://www.zhoulujun.cn/html/tools/webServer/nginx/2021_0817_8663.html