精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

通過 Node.js, Express.js 實現 HTTP/2 Server Push

開發 前端
HTTP/2 是 Web 開發的新標準,擁有很多不錯的優點能夠讓 Web 訪問更快且開發的工作更輕松簡單。比如,引入多路復用傳輸不用合并資源,服務器推送(Server Push)資源讓瀏覽器預加載。

什么是 HTTP/2 Server Push

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 實現服務器推送(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 密鑰生成” 或者按照以下步驟去生成密鑰、證書。在該文提供的源碼中沒有上傳生成的密鑰和證書

  1. $ mkdir http2-node-server-push  
  2. $ cd http2-node-server-push 
  3. $ openssl genrsa -des3 -passout pass:x -out server.pass.key 2048 
  4. ... 
  5. $ openssl rsa -passin pass:x -in server.pass.key -out server.key 
  6. writing RSA key 
  7. $ rm server.pass.key 
  8. $ openssl req -new -key server.key -out server.csr 
  9. ... 
  10. Country Name (2 letter code) [AU]:US 
  11. State or Province Name (full name) [Some-State]:California 
  12. ... 
  13. A challenge password []: 
  14. ... 
  15. $ openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt 

按照以上步驟,你就會產生三個 SSL 文件:

  • server.crt
  • server.csr
  • server.key

你就可以在 Node.js 的 server 腳本中讀取 server.key 和 server.crt。

搭建項目

首先,通過 package.json 初始化項目和下載項目依賴:

  1. npm init -y 
  2. npm i express@4.14.0 morgan@1.7.0 spdy@3.4.0 --save 
  3. npm i node-dev@3.1.1 --save-dev 

當前的目錄結構如下

  1. /http2-node-server-push 
  2. /node_modules 
  3. index.js 
  4. package.json 
  5. server.crt 
  6. server.csr 
  7. server.key 

然后,在 package.json 的 scripts 中添加兩個腳本行,去簡化命令(node-dev、自動重載):

  1. "start""./node_modules/.bin/node-dev ."
  2. "start-advanced""./node_modules/.bin/node-dev index-advanced.js" 

現在就可以開始使用 Node.js 、 Express.js 、 spdy 編寫這個簡單實現的帶服務器推送 HTTP/2 服務器

編寫腳本

首先,創建 index.js 腳本,并引入以及實例化依賴,看看查看上面的項目目錄結構。其中,我使用了 ES6/ES2015 的語法 const來聲明依賴,如果你不熟悉該聲明語法,你可以進一步閱讀Top 10 ES6 Features Every Busy JavaScript Developer Must Know。

  1. const http2 = require('spdy'
  2. const logger = require('morgan'
  3. const express = require('express'
  4. const app = express() 
  5. const fs = require('fs'

然后,設置 morgan logger 來監聽服務器服務了哪些請求。

  1. app.use(logger('dev')) 

設置主頁,該頁面顯示了 /pushy 是我們服務器推送的頁面。

  1. app.get('/'function (req, res) { 
  2.   res.send(`hello, http2! go to /pushy`) 
  3. }) 

服務器推送只需簡單的調用 spdy 實現的 res.push ,我們將文件路徑名傳輸進去作為第一個參數,瀏覽器會使用這個路徑名來匹配push promise 資源。res.push() 的第一個參數 /main.js 一定得跟 HTML 文件中需要的文件名相匹配。

而第二個參數是一個可選的對象,設置了該資源的一些資源信息描述。

  1. app.get('/pushy', (req, res) => { 
  2.   var stream = res.push('/main.js', { 
  3.     status: 200, // optional 
  4.     method: 'GET', // optional 
  5.     request: { 
  6.       accept: '*/*' 
  7.     }, 
  8.     response: { 
  9.       'content-type''application/javascript' 
  10.     } 
  11.   }) 
  12.   stream.on('error'function() { 
  13.   }) 
  14.   stream.end('alert("hello from push stream!");'
  15.   res.end('<script src="/main.js"></script>'
  16. }) 

你可以看到,stream 對象有兩個方法 on 和 end。前者監聽了 error 和 finish 事件,而后者則監聽完成傳輸 end,然后就會main.js 就會觸發彈窗。

或者,如果你擁有多個數據塊,你可以選擇使用 res.write() 然后最后使用 res.end(),其中 res.end() 會自動關閉結束response 而 res.write() 則讓它保持開啟。(該文的源碼中未實現這種情況)

最后,讀取 HTTPS 密鑰和證書并使用 spdy 啟動運轉服務器。

  1. var options = { 
  2.   key: fs.readFileSync('./server.key'), 
  3.   cert: fs.readFileSync('./server.crt'
  4.  
  5. http2 
  6.   .createServer(options, app) 
  7.   .listen(8080, ()=>{ 
  8.     console.log(`Server is listening on https://localhost:8080. 
  9.     You can open the URL in the browser.`) 
  10.   } 

該實現的關鍵就在于,圍繞著 streams(流)。不是樹林中的河流,而是指開發者使用的從源頭到客戶端的建立起的數據通道流。如果你幾乎不懂流以及 Node.js 和 Express.js 的 HTTP 的請求和返回信息

啟動和對比 HTTP/2 Server Push

使用命令 node index.js 或者 npm stat 運行服務端腳本,然后訪問 https://localhost:3000/pushy,就可以看到彈窗!而且我們在該路由不存在文件,你可以查看服務器終端的 logs ,只會有一個請求,而不是沒使用服務器推送的時候的兩個請求(一個 HTML、一個 JS)。

可以在瀏覽器中檢測收到服務器端推送的行為。Chrome 啟動開發者工具,打開 Network 標簽,你可以看到 main.js 不存在綠色時間條,就是說明沒有等待時間 TTFB (Time to First Byte)詳細

再仔細看,可以看到請求是由 Push 開始發起的(Initiator列查看),沒有使用服務器推送的 HTTP/2 服務器或者 HTTP/1,這一列就會顯示文件名稱,如 index.html 發起的顯示就是 index.html。

實踐就結束了,使用了 Express 和 Spdy 簡單就實現了推送 JS 資源,而該資源可以用于后面 HTML 中 <script> 標簽引入的。當然你也可以在腳本中使用 fs 來讀取文件資源。

總結

HTTP/2 擁有很多很好的特性,服務器推送是最被看好的特性之一。它的好處就在于當瀏覽器請求頁面的時候,同時發送必需的資源文件(圖片,CSS 樣式,JS 文件),而不需要等待客戶端瀏覽器請求這些資源,從而做到更快的第一次渲染時間

HTTP/2 庫 spdy 讓開發者在基于 Express 的應用能更容易的實現服務器推送特性。

責任編輯:武曉燕 來源: segmentfault
相關推薦

2013-06-14 09:27:51

Express.jsJavaScript

2020-08-07 10:40:56

Node.jsexpress前端

2021-01-14 10:48:34

Docker CompNode.js開發

2014-09-12 10:35:09

Node.jsHTTP 206

2014-07-11 14:16:15

AbsurdJSExpress

2025-10-15 00:26:20

2013-11-01 09:34:56

Node.js技術

2015-03-10 10:59:18

Node.js開發指南基礎介紹

2019-02-21 10:38:10

Web 開發代碼

2023-06-30 23:25:46

HTTP模塊內存

2011-11-01 10:30:36

Node.js

2011-09-08 13:46:14

node.js

2011-09-09 14:23:13

Node.js

2011-09-02 14:47:48

Node

2012-10-24 14:56:30

IBMdw

2011-11-10 08:55:00

Node.js

2022-04-01 08:02:32

Node.js快照加速hooks

2022-04-02 06:04:03

Node.js代碼緩存V8

2016-09-18 16:04:24

HTTPNode應用

2021-07-16 04:56:03

NodejsAddon
點贊
收藏

51CTO技術棧公眾號

中文无码久久精品| 久久精品97| 国产三级精品三级在线专区| 国产精品自产拍在线观| 成人信息集中地| 成人资源在线| 欧亚洲嫩模精品一区三区| 91精品国产吴梦梦| 麻豆国产在线播放| 国产很黄免费观看久久| 日韩av第一页| 国产一级二级三级视频| 女厕嘘嘘一区二区在线播放 | 看av免费毛片手机播放| 永久免费av在线| 波多野结衣91| 亚洲xxx视频| 中国女人真人一级毛片| 伊人精品视频| 久久深夜福利免费观看| 最新中文字幕视频| 波多野结衣欧美| 欧美日本一区二区三区四区 | 亚洲天堂电影| 亚洲已满18点击进入久久| 日韩激情视频| 午夜福利视频一区二区| 国产精品中文有码| 国产一区二区在线免费视频| www.色国产| 99精品国产一区二区青青牛奶| 久久久成人精品视频| 久久只有这里有精品| 国产精品xxx在线观看| 3d成人动漫网站| 亚洲欧洲日本精品| 午夜日韩成人影院| 欧美性猛交xxxx黑人| 青青青青草视频| 免费在线国产视频| 亚洲国产精品影院| 欧美国产综合在线| 日本免费中文字幕在线| 国产精品色眯眯| 欧美极品一区二区| 天天操天天操天天操| 成人在线综合网| 999热视频| 亚洲av永久纯肉无码精品动漫| 精品一区二区三区免费播放 | 日韩免费视频播放| 18video性欧美19sex高清| 亚洲综合视频网| 男人天堂av片| 成全电影大全在线观看| 一区二区久久久久| 免费特级黄色片| 24小时免费看片在线观看| 亚洲大型综合色站| 日本日本19xxxⅹhd乱影响| 亚洲涩涩在线| 在线精品视频免费播放| 日本a√在线观看| 精品国产欧美日韩一区二区三区| 91官网在线观看| 中文字幕一区二区三区四区在线视频| 88xx成人永久免费观看| 91福利在线导航| 色免费在线视频| 91成人短视频在线观看| 日韩欧美第一区| 国产情侣久久久久aⅴ免费| 天堂久久av| 亚洲国产精品成人精品| 国产三级视频网站| 欧美日中文字幕| 久久久91精品国产| 九九视频在线免费观看| 国产农村妇女精品一区二区| 国产成人精品免费视频| 在线视频欧美亚洲| 国产成人h网站| 久久久久se| 成人欧美一区| 亚洲男同1069视频| 欧美日韩成人免费视频| 中文字幕日本一区二区| 91麻豆精品国产91久久久久久久久| 国模大尺度视频| 亚洲美女久久| 精品国产一区av| 日韩三级视频在线播放| 青青草91视频| 999国产视频| 国产在线视频资源| 亚洲免费观看在线观看| 内射国产内射夫妻免费频道| 国产在视频一区二区三区吞精| 日韩一区国产二区欧美三区| 中文成人无字幕乱码精品区| 不卡av一区二区| 欧美激情小视频| 欧美在线视频精品| 国产99精品在线观看| 欧美性大战久久久久| caoporn97在线视频| 黑人巨大精品欧美一区二区一视频| 一路向西2在线观看| 国产极品模特精品一二| 中文字幕亚洲情99在线| 日本在线视频免费观看| 极品少妇一区二区三区精品视频 | 欧美视频xxx| 国产精品电影一区二区| 日本www在线播放| 亚洲国产中文在线二区三区免| 亚洲精品自拍偷拍| 欧美日韩免费做爰视频| 日韩—二三区免费观看av| 国产精品入口免费| 免费网站成人| 在线观看亚洲一区| 国产一级二级视频| 一区二区三区四区在线观看国产日韩| 日韩免费不卡av| 午夜av免费观看| 亚洲午夜激情网站| 色婷婷综合在线观看| 日韩综合在线| 国产精品狠色婷| 头脑特工队2在线播放| 亚洲综合一区二区| 色综合久久久无码中文字幕波多| 成人精品中文字幕| 国产精品成人国产乱一区| 亚洲色偷精品一区二区三区| 亚洲一区二区不卡免费| 中文字幕第22页| 无码一区二区三区视频| 国产精品丝袜视频| 77777影视视频在线观看| 欧美性猛交xxxx| a毛片毛片av永久免费| 亚洲区国产区| 国产精品一区免费观看| 丁香花在线高清完整版视频| 日韩亚洲欧美中文三级| 欧美偷拍第一页| 国产一区二区三区精品欧美日韩一区二区三区 | 国产毛片久久久久久国产毛片| 91精品一久久香蕉国产线看观看| 日韩在线视频导航| 一区二区不卡视频在线观看| 欧美国产激情二区三区| 午夜激情av在线| 国产精品久久久乱弄 | 国产又黄又大又爽| 自拍偷拍欧美精品| 国内精品国产三级国产aⅴ久| 91一区二区| 亚洲一区制服诱惑| 91白丝在线| 亚洲男人的天堂在线| 91在线视频免费播放| 国产欧美一二三区| 蜜臀一区二区三区精品免费视频| 国产精品精品国产一区二区| 91九色极品视频| 高清视频在线观看三级| 日韩精品免费在线| 在线免费观看中文字幕| 亚洲美女偷拍久久| 看全色黄大色黄女片18| 性高湖久久久久久久久| 色涩成人影视在线播放| 国产一区二区三区精品在线观看| 欧美日韩国产999| 五月婷婷综合久久| 欧美视频第二页| 久久免费视频精品| 久久综合99re88久久爱| 99热这里只有精品在线播放| 91精品电影| 精品国产一区二区三区日日嗨| 成人av三级| 久久在精品线影院精品国产| 日韩专区第一页| 欧美日韩不卡在线| 国产无码精品在线播放| 国产免费成人在线视频| 少妇丰满尤物大尺度写真| 99riav国产精品| 一本一本a久久| 爱高潮www亚洲精品| 国产高清视频一区三区| yellow91字幕网在线| 国产视频精品久久久| 国产欧美熟妇另类久久久 | 国内伊人久久久久久网站视频 | 国产精品黄网站| 国产精品入口免费视频一| 免费看电影在线| 一区二区三区四区精品| 日本黄色不卡视频| 欧美日韩精品一区二区三区蜜桃 | 久久久久国产一区二区| 久久免费视频2| 夜夜躁狠狠躁日日躁2021日韩| 亚洲xxxxx| 国产第一亚洲| 97av在线影院| 中文字幕有码在线观看| 国产午夜精品一区二区三区| 日本xxxxwww| 91精品在线一区二区| 无码人妻熟妇av又粗又大| 亚洲一区二区三区爽爽爽爽爽| 中文字幕黄色网址| 91视视频在线观看入口直接观看www | 做爰无遮挡三级| 黄色成人av在线| 久久国产精品波多野结衣av| 中文字幕一区二区三区乱码在线| 极品人妻一区二区三区| 成人黄页毛片网站| www激情五月| 久久国产夜色精品鲁鲁99| 欧美日韩中文在线视频| 亚洲国产网站| 美女扒开大腿让男人桶| 欧美伊人影院| 男女激烈动态图| 91久久夜色精品国产按摩| 视频一区三区| 欧美日韩国产免费观看视频| 久久精品五月婷婷| 另类春色校园亚洲| 国产一区免费在线观看| 麻豆一区一区三区四区| 国产伦精品一区二区| 91精品尤物| 高清国语自产拍免费一区二区三区| 成人日韩视频| 91在线观看免费网站| 精品国产亚洲一区二区三区大结局 | 成人网在线免费视频| 免费看三级黄色片| 国产成人精品免费在线| 在线播放国产视频| 国产91对白在线观看九色| 天天爽夜夜爽视频| 国产福利一区二区三区| 妖精视频在线观看| 丰满岳乱妇一区二区三区| 91精品国产高清91久久久久久 | 国产乱码精品一区二区三区卡| 国产精品久久久久久久久久白浆| 国产精品一区免费观看| 日韩欧美影院| 日韩aⅴ视频一区二区三区| 国产毛片一区二区三区| 亚洲欧洲日本国产| 香蕉久久网站| 国产成人亚洲综合无码| 亚洲无吗在线| 69堂免费视频| 麻豆免费精品视频| 亚洲av毛片在线观看| 不卡的看片网站| 亚洲自拍偷拍图| 国产精品福利影院| 麻豆视频在线观看| 韩曰欧美视频免费观看| 一区二区视频免费观看| 日韩一区和二区| 国产精品国产高清国产| 国产亚洲美女精品久久久| 麻豆传媒在线观看| 欧美激情一区二区三区高清视频 | av中文天堂在线| 美女啪啪无遮挡免费久久网站| 黄网av在线| 国产精品激情av在线播放| 奇米一区二区| 蜜桃传媒一区二区| 99久久夜色精品国产亚洲96| 久久久性生活视频| 欧美a级一区二区| 国产精品91av| 中文字幕第一区二区| 妺妺窝人体色www在线下载| 欧美性生交xxxxxdddd| 国产精品人人爽| 亚洲精品ady| 日本欧美在线视频免费观看| 高清一区二区三区四区五区| 成人做爰免费视频免费看| 国产精品一区在线观看| 97人人精品| 欧美成人免费高清视频| 国产精品综合在线视频| 蜜桃无码一区二区三区| 一二三四社区欧美黄| 中文字幕一区二区三区人妻四季| 亚洲国产成人91精品| 日本三级视频在线播放| 日韩暖暖在线视频| 成人精品动漫一区二区三区| 正在播放一区| 久久精品人人| 亚洲欧洲日韩综合| 中文字幕一区av| 成人av网站在线播放| 欧美精品一区二区三区久久久| 日本中文字幕伦在线观看| 日本成人黄色片| 久久365资源| 穿情趣内衣被c到高潮视频| 日韩二区三区四区| 亚洲综合网在线观看| 婷婷综合在线观看| 色呦呦中文字幕| 欧美激情在线播放| 精品国产18久久久久久二百| 亚洲欧美国产一区二区| 老司机久久99久久精品播放免费| 成人在线观看一区二区| 亚洲女人的天堂| 国产精品探花视频| www.99久久热国产日韩欧美.com| 户外露出一区二区三区| 久久99精品久久久久久水蜜桃| 国产在线成人| 香蕉视频在线观看黄| 亚洲欧美日韩国产手机在线| 中文字幕欧美色图| 国产午夜精品视频免费不卡69堂| 亚洲人体视频| 欧美不卡在线一区二区三区| 国产精品日韩久久久| 中文字幕一区二区三区乱码不卡| 亚洲一级片在线观看| 午夜精品一二三区| 欧美激情xxxxx| 亚洲国产视频二区| 成人免费毛片在线观看| 不卡一二三区首页| 国内免费精品视频| 亚洲精品美女在线| 中文字幕在线视频网站| 欧美人xxxxx| 日本91福利区| 99热6这里只有精品| 欧美高清视频不卡网| 超碰人人在线| av一区和二区| 宅男噜噜噜66一区二区| www.久久国产| 在线观看日产精品| 日本www在线| 99超碰麻豆| 亚洲理伦在线| www在线观看免费视频| 91国偷自产一区二区三区成为亚洲经典| 久蕉依人在线视频| 国产精品中文字幕在线观看| 久久免费精品视频在这里| www.国产福利| 黄色精品一区二区| 国产精品免费播放| 国产日韩专区在线| 狠狠综合久久av一区二区老牛| 黄色在线免费播放| 在线一区二区视频| 理论片午午伦夜理片在线播放| 97中文在线观看| 午夜在线视频一区二区区别| 国产馆在线观看| 日韩欧美专区在线| 午夜影院一区| 在线不卡视频一区二区| 成人一区二区三区视频| 亚洲欧美一区二区三区在线观看| 日韩中文字幕第一页| 136福利精品导航| 超碰网在线观看| 一区二区在线免费观看| 青青草免费观看免费视频在线| 国产女人18毛片水18精品| 亚洲毛片视频| 国产又黄又粗又猛又爽的| 欧美zozozo| 成人h在线观看| 91九色丨porny丨国产jk| 欧美激情在线免费观看| 午夜精品久久久久久久99| 日产精品久久久一区二区福利| 国产精品久久久久久久久久10秀 | 中文字幕日韩久久| 一本久道久久综合中文字幕|