HTTP/2 是 Web 开辟的新标准,拥有很多不错的长处可以或许让 Web 拜访更快且开辟的工作更轻松简单。比如,惹人多路复竽暌姑传输不消归并资本,办事器推送(Server Push)资本让浏览器预加载。
该文不会讲述 HTTP/2 的所有优势。你可以经由过程上篇文┞仿懂得更多{% post_link http2-node-express %}。该文重要存眷于在 Node.js情况应用 Express.js 和 HTTP/2 库 spdy。
办事器推送(Server Push)工作方法是经由过程在一个 HTTP/2 请求中绑缚多个资本。在底层,办事器会发送一个 PUSH_PROMISE,客户端(包含浏览器)就可以应用它且不基于 HTML 文件是否须要该资本。如不雅浏览器检测到须要该资本,就会匹配到收到的办事器推送的 PROMISE 然后让该资本表示的就像正常的浏览器 Get 请求资本。显而易见,如不雅匹配到有推送,浏览器就不须要从新请求,然后直接应用客户端缓存。这推荐几篇文┞仿关于办事器推送(Server Push)的好处:
- What’s the benefit of Server Push?
- Announcing Support for HTTP/2 Server Push
- Innovating with HTTP 2.0 Server Push
如今就可以开端应用 Node.js 、 Express.js 、 spdy 编写这个简单实现的带办事器推送 HTTP/2 办事器
这是个关于在 Node.js 实现办事器推送(Server Push)实践教程。为了更清楚精简,我们只实现一个路由地址 /pushy 的 Node.js和 Express.js 办事器,它会推送一个 JS 文件,正如之前所说,我们会用到一个 HTTP/2 库 spdy。
HTTP/2 和 Node.js
先解释一下,为啥在 Node.js 情况选择 HTTP/2 库 spdy。当前来说,为 Node.js 重要有两个库实现了 HTTP/2 :
- spdy
- http2
两个库都跟 Node.js 核心模块的 http 和 https 模块 api 很类似。这就意味着如不雅你不应用 Express ,这两个库就没什么差别。然而, spdy 库支撑 HTTP/2 和 Express,而 http2 库当前不支撑 Express。这就是为什愦我们选择应用 spdy , Express 是Node.js 合适搭配的实践标准的办事框架。之所以叫 spdy是来自于 Google 的 SPDY 协定后来进级成 HTTP/2。
HTTPS密钥和证书
要在浏览器(Firefox, Safari, Chrome, 或者 Edge)中拜访应用 HTTPS ,你须要生成密钥和证书。去搜刮 “ssl 密钥生成” 或者按照以下步调去生成密钥、证书。在该文供给的源码中没有上传生成的密钥和证书
你就可以在 Node.js 的 server 脚本中攫取 server.key 和 server.crt。
- $ mkdir http2-node-server-push
- $ cd http2-node-server-push
- $ openssl genrsa -des3 -passout pass:x -out server.pass.key 2048
- ...
- $ openssl rsa -passin pass:x -in server.pass.key -out server.key
- writing RSA key
- $ rm server.pass.key
- $ openssl req -new -key server.key -out server.csr
- ...
- Country Name (2 letter code) [AU]:US
- State or Province Name (full name) [Some-State]:California
- ...
- A challenge password []:
- ...
- $ openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt
按照以上步调,你就会产生三个 SSL 文件:
- server.crt
- server.csr
- server.key
搭建项目
起首,经由过程 package.json 初始化项目和下载项目依附:
- npm init -y
- npm i express@4.14.0 morgan@1.7.0 spdy@3.4.0
推荐阅读
如今的数据中间早已不是一座孤立的机房,而是一个建筑群。一个数据中间可以包含很多个分支数据中间,可以说是一个数据中间群,这些分支数据中间所处的地位不合,却可以经由过程收集互联起>>>详细阅读
本文标题:通过 Node.js, Express.js 实现 HTTP/2 Server Push
地址:http://www.17bianji.com/lsqh/34916.html
1/2 1