精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲观看黄色网| 污污污污污污www网站免费| 日韩三级一区二区| 精品亚洲成a人片在线观看| 欧美一区二区三区高清视频| 欧美日韩视频在线第一区 | 久久手机在线视频| 波多野结衣在线观看视频| 欧美成人精品一区二区三区在线看| 在线不卡的av| 日本在线观看一区| 国产精品欧美激情在线| 不卡在线一区二区| 日韩三级高清在线| 欧美性受黑人性爽| 亚洲色图欧美视频| 亚洲高清在线| 最近2019免费中文字幕视频三| 老司机av网站| 高清av一区| 亚洲午夜精品一区二区三区他趣| 视频在线99re| 五月婷婷久久久| 国产在线一区二区| 久久好看免费视频| 精品国产av色一区二区深夜久久 | 18视频在线观看网站| 裸体在线国模精品偷拍| 国内外成人免费激情在线视频 | 亚洲风情第一页| 热久久一区二区| 97精品一区二区三区| 永久免费看mv网站入口| 国产精选一区| 亚洲精品久久久久久久久久久 | 伊人网av在线| 久久久久一区| 午夜精品久久久久久久久久久久| 91大神福利视频| 国产成人精品一区二区免费看京 | 国产伦精品一区二区三区高清| 中国女人真人一级毛片| 性8sex亚洲区入口| 久久久之久亚州精品露出| 日韩成人短视频| 99精品在线免费在线观看| 欧美日韩免费视频| 人妻丰满熟妇av无码区app| 18video性欧美19sex高清| 一区二区三区四区乱视频| 中文字幕免费高| 男人和女人做事情在线视频网站免费观看| 久久久美女毛片| 蜜桃麻豆www久久国产精品| 手机看片国产1024| 成人高清视频在线| 国产一区二区在线观看免费播放| www.国产欧美| 成人在线综合网站| 高清不卡一区二区三区| 精品国产无码一区二区| 国产成人在线免费| 国产综合18久久久久久| 熟妇人妻av无码一区二区三区| 成人午夜激情影院| 国产日韩二区| 欧美香蕉爽爽人人爽| 97久久久精品综合88久久| 精品一区日韩成人| 国产最新视频在线| 亚洲国产精品成人综合色在线婷婷| 蜜桃av久久久亚洲精品| 成人在线观看黄色| 亚洲欧洲日韩综合一区二区| 在线观看三级网站| av在线网页| 欧美日韩另类在线| 性生交免费视频| 精品国产三级| 91久久免费观看| 男人搞女人网站| 亚洲ww精品| 精品久久人人做人人爽| 在线免费观看a级片| 精品久久久久久久| 欧美成人一二三| 中文字幕亚洲精品在线| 999久久久精品国产| 免费91在线视频| 亚洲一区欧美在线| 日韩电影一区二区三区| 91九色在线视频| 特黄aaaaaaaaa真人毛片| 久久精品一级爱片| 最新av网址在线观看| 黄视频网站在线观看| 欧美色窝79yyyycom| 性xxxxxxxxx| 国产精选一区| 欧美激情精品久久久久久| 国产一区二区视频网站| 国内精品伊人久久久久av影院| 国产在线观看一区| 1区2区3区在线观看| 亚洲图片欧美一区| 在线观看高清免费视频| 国产精品xxxav免费视频| 在线日韩中文字幕| 五月天婷婷综合网| 久久99国产精品免费| 久久国产精品-国产精品| 男人天堂手机在线| 91久久精品国产91性色tv| 色婷婷狠狠18禁久久| 欧美日韩国产高清电影| 91豆花精品一区| 国产又大又黄又爽| 国产亚洲一区二区三区在线观看 | av免费看在线| 91高清视频在线| 丰满岳乱妇一区二区| 欧美va久久久噜噜噜久久| 91国自产精品中文字幕亚洲| 国产剧情久久久| 中文字幕二三区不卡| 无码精品a∨在线观看中文| 天堂va欧美ⅴa亚洲va一国产| 中文字幕欧美视频在线| 五月婷婷激情视频| 99国产欧美另类久久久精品| 红桃一区二区三区| 亚洲一区有码| 日韩专区在线观看| 99成人在线观看| 日韩1区2区日韩1区2区| 蜜桃91精品入口| 少妇视频在线观看| 精品国产乱码久久久久久牛牛 | xnxx国产精品| 你真棒插曲来救救我在线观看| 国产一区二区在线观| 日韩网站在线观看| 中文字幕免费播放| 国产农村妇女精品| 无人在线观看的免费高清视频| 午夜a一级毛片亚洲欧洲| 午夜精品久久久久久久白皮肤| www.色亚洲| 亚洲一区二区成人在线观看| 台湾佬美性中文| 国产精品地址| 国产精品制服诱惑| 电影在线观看一区| 亚洲精品久久视频| xxxx.国产| 久久久久青草大香线综合精品| 国产乱子夫妻xx黑人xyx真爽| 同性恋视频一区| 55夜色66夜色国产精品视频| 手机看片福利在线观看| 亚洲国产高清不卡| 国产一级片黄色| 伊人春色之综合网| 日本精品va在线观看| 视频国产在线观看| 日韩欧美在线视频观看| 91高清国产视频| 99精品电影| 999国产在线| 毛片在线播放网站| 欧美视频一区二区三区在线观看| 国产精品久久久久久久av| 日本欧美久久久久免费播放网| 天堂资源在线亚洲资源| 亚洲欧美综合久久久久久v动漫| 久久综合色影院| 丰满人妻妇伦又伦精品国产| 五月婷婷综合激情| 国精产品一区二区三区| 久久国产精品99久久人人澡| 国产又粗又大又爽的视频| 777久久精品| 清纯唯美亚洲激情| 日本视频不卡| 精品国产一区二区亚洲人成毛片 | 欧美视频中文字幕| 五月婷婷一区二区| 91麻豆蜜桃一区二区三区| 日本在线一二三区| 亚洲经典三级| 亚洲欧美日韩精品久久久| ccyy激情综合| 日韩中文在线观看| 黄色小视频免费观看| 日本乱码高清不卡字幕| 国产一二三四区| 久久综合九色综合97婷婷| 色18美女社区| 久久人人88| 国产伦精品一区二区三| 粉嫩av一区二区三区四区五区| 欧美夫妻性生活视频| 国产一区二区影视| 精品福利二区三区| 91久久精品国产91性色69| 午夜精品久久久久久久久久| 蜜桃av免费在线观看| 久久裸体视频| 精品免费久久久久久久| 国产精品亚洲二区| 国产一区二区三区免费不卡| 亚洲欧美在线人成swag| 国产成人涩涩涩视频在线观看| 日本在线视频中文有码| 最新日韩中文字幕| 日本国产在线| 欧美精品一区二区在线观看| 91麻豆国产在线| 欧美伊人精品成人久久综合97 | 欧美日韩国产欧| 91中文字幕在线观看| 欧美www.| 欧美怡春院一区二区三区| 影院在线观看全集免费观看| 中文日韩在线视频| 你懂的免费在线观看视频网站| 日韩欧美国产午夜精品| 国产精品一区二区人人爽| 色狠狠av一区二区三区| 青青草成人av| 亚洲国产成人高清精品| 欧美色图亚洲视频| 自拍偷拍国产精品| 蜜桃视频最新网址| 国产欧美一区二区精品性色超碰 | 日本一区二区三区在线不卡 | 中文字幕欧美一| 激情五月深爱五月| 国产欧美精品在线观看| 国产ts丝袜人妖系列视频| 成人毛片老司机大片| 日本黄色大片在线观看| 国产成人综合网站| 国产精品偷伦视频免费观看了| 国产美女精品在线| 色姑娘综合天天| 国产一区二区三区在线看麻豆| 污污动漫在线观看| 久久精品国产亚洲一区二区三区| 污污的网站18| 精品在线一区二区三区| aaa一级黄色片| 国产精品中文字幕一区二区三区| 亚洲天堂av一区二区| 国产中文字幕精品| 国产高潮失禁喷水爽到抽搐| 成人免费av资源| 中文字幕一区三区久久女搜查官| 91色.com| 日本一区二区视频在线播放| 国产精品久久久久三级| 国产日韩欧美在线观看视频| 一区二区三区在线观看网站| 国产精品theporn动漫| 精品久久久久久亚洲国产300| 狠狠人妻久久久久久| 欧美在线制服丝袜| 久久久久久av无码免费网站| 亚洲一区av在线| 日韩欧美亚洲视频| 色屁屁一区二区| 亚洲一二区视频| 第一福利永久视频精品| 台湾佬中文在线| 欧美三级电影在线观看| av男人天堂网| 亚洲精品国产精品国自产在线 | 日韩精品免费视频一区二区三区 | 日韩电影网址| 中文字幕九色91在线| av片在线观看网站| 91精品国产91久久久久久| 国产精品美女午夜爽爽| 99精品国产高清在线观看| 日韩av资源网| 97在线资源站| 自拍自偷一区二区三区| 亚洲一区二区自拍偷拍| 国产一区二区中文| 北条麻妃在线一区| 国产一区二区女| 极品白嫩丰满美女无套| 一区二区中文视频| 国产精品老女人| 91精品国产色综合久久不卡蜜臀 | 国产高清av在线播放| 日韩av一区二| 岛国av免费观看| 中文字幕乱码日本亚洲一区二区| 久久久久久久9999| 欧美亚洲综合色| 少妇人妻精品一区二区三区| 中文字幕亚洲欧美| 成人免费网站观看| 91蜜桃网站免费观看| 国产在线日韩精品| av网站大全免费| 久久国产欧美日韩精品| 日韩一级视频在线观看| 一区二区三区在线视频播放| 在线观看视频中文字幕| 亚洲精品一区二区三区婷婷月 | 欧洲美女7788成人免费视频| 国产精品一区三区在线观看| 日韩av电影免费在线| 黄色精品网站| 热久久久久久久久| 国产日韩精品一区二区三区 | 国产在线激情| 日本久久久久久| 成人三级av在线| 久久最新免费视频| 麻豆精品一二三| 在线观看国产精品一区| 精品国产乱码久久久久酒店| www.五月婷| 欧美成人免费网| 亚洲精品无播放器在线播放| 奇米影视首页 狠狠色丁香婷婷久久综合| 国产主播一区| 亚洲欧美综合视频| 亚洲老妇xxxxxx| a级片在线免费看| 久久久精品国产| 亚洲男女网站| 日韩人妻精品一区二区三区| 久久精品国产一区二区三| 欧美午夜激情影院| 欧美在线不卡一区| 国产大学生校花援交在线播放| 日本高清不卡在线| 啪啪激情综合网| 久久精品国产精品亚洲色婷婷| 99精品热视频| 黄色一级片免费看| 日韩精品在线视频观看| 涩涩涩在线视频| 欧美极品色图| 蜜臀av性久久久久蜜臀av麻豆| 一级黄色录像毛片| 欧美日韩久久一区二区| 日本精品在线| 亚洲sss综合天堂久久| 欧美成熟视频| 岛国精品一区二区三区| 午夜精品福利视频网站| 水中色av综合| 国产成人一区二区三区电影| 欧美色女视频| 999久久久精品视频| 一区二区三区国产| 天天干天天操av| 琪琪第一精品导航| 日韩精品免费| 欧美高清精品一区二区| 亚洲亚洲人成综合网络| 手机在线观看免费av| 热99在线视频| 久久国产电影| 亚洲美女高潮久久久| 午夜免费久久看| 国产一区二区三区福利| 成人高h视频在线| 亚洲国产日韩欧美一区二区三区| 国产福利在线观看视频| 欧美日韩在线观看一区二区| 亚洲精品白浆| 欧美日韩亚洲一区二区三区四区| 久久er99热精品一区二区| 特级片在线观看| 日韩精品在线视频| 成人精品在线| 2022亚洲天堂| 中文字幕中文字幕在线一区| 久久草视频在线| 国产一区二区三区欧美| 精品国产三区在线| 久久9精品区-无套内射无码| 国产精品国产三级国产专播品爱网| 国产视频第一页| 日韩av免费在线看| 欧美粗暴jizz性欧美20| 亚洲区自拍偷拍| 日韩午夜中文字幕| 日韩av免费| 国产日本在线播放| 国产精品久线在线观看| 午夜视频在线免费播放| 成人字幕网zmw| 日韩在线卡一卡二|