成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

前端應(yīng)該了解的HTTP2

leo108 / 1556人閱讀

摘要:二進(jìn)制分幀在應(yīng)用層與傳輸層之間增加一個(gè)二進(jìn)制分幀層,以此達(dá)到在不改動(dòng)的語義,方法狀態(tài)碼及首部字段的情況下,突破的性能限制,改進(jìn)傳輸性能,實(shí)現(xiàn)低延遲和高吞吐量。

歡迎一起交流

歡迎關(guān)注我的個(gè)人公眾號(hào),不定期更新自己的工作心得。

Why HTTP2

影響一個(gè)網(wǎng)絡(luò)請(qǐng)求的因素主要有兩個(gè),帶寬和延遲。今天的網(wǎng)絡(luò)基礎(chǔ)建設(shè)已經(jīng)使得帶寬得到極大的提升,大部分時(shí)候都是延遲在影響響應(yīng)速度。

連接無法復(fù)用

連接無法復(fù)用會(huì)導(dǎo)致每次請(qǐng)求都經(jīng)歷三次握手和慢啟動(dòng)。三次握手在高延遲的場景下影響較明顯,慢啟動(dòng)則對(duì)文件類大請(qǐng)求影響較大。

head of line blocking

head of line blocking會(huì)導(dǎo)致帶寬無法被充分利用,以及后續(xù)健康請(qǐng)求被阻塞。


HTTP1.0 -> HTTP1.1

不過pipelining并不是救世主,它也存在不少缺陷:

pipelining只能適用于http1.1,一般來說,支持http1.1的server都要求支持pipelining

只有冪等的請(qǐng)求(GET,HEAD)能使用pipelining,非冪等請(qǐng)求比如POST不能使用,因?yàn)檎?qǐng)求之間可能會(huì)存在先后依賴關(guān)系。

head of line blocking并沒有完全得到解決,server的response還是要求依次返回,遵循FIFO(first in first out)原則。也就是說如果請(qǐng)求1的response沒有回來,2,3,4,5的response也不會(huì)被送回來。

絕大部分的http代理服務(wù)器不支持pipelining。

和不支持pipelining的老服務(wù)器協(xié)商有問題。

可能會(huì)導(dǎo)致新的Front of queue blocking問題。

HTTP2 VS HTTP1.1 多路復(fù)用

多路復(fù)用通過多個(gè)請(qǐng)求stream共享一個(gè)tcp連接的方式,解決了http1.x holb(head of line blocking)的問題,降低了延遲同時(shí)提高了帶寬的利用率。

壓縮頭部

HTTP/2.0規(guī)定了在客戶端和服務(wù)器端會(huì)使用并且維護(hù)「首部表」來跟蹤和存儲(chǔ)之前發(fā)送的鍵值對(duì),對(duì)于相同的頭部,不必再通過請(qǐng)求發(fā)送,只需發(fā)送一次。

事實(shí)上,如果請(qǐng)求中不包含首部(例如對(duì)同一資源的輪詢請(qǐng)求),那么首部開銷就是零字節(jié)。此時(shí)所有首部都自動(dòng)使用之前請(qǐng)求發(fā)送的首部。

如果首部發(fā)生變化了,那么只需要發(fā)送變化了數(shù)據(jù)在Headers幀里面,新增或修改的首部幀會(huì)被追加到“首部表”。首部表在 HTTP2.0的連接存續(xù)期內(nèi)始終存在,由客戶端和服務(wù)器共同漸進(jìn)地更新。

二進(jìn)制分幀

在應(yīng)用層與傳輸層之間增加一個(gè)二進(jìn)制分幀層,以此達(dá)到“在不改動(dòng)HTTP的語義,HTTP 方法、狀態(tài)碼、URI及首部字段的情況下,突破HTTP1.1的性能限制,改進(jìn)傳輸性能,實(shí)現(xiàn)低延遲和高吞吐量?!?/p>

在二進(jìn)制分幀層上,HTTP2.0會(huì)將所有傳輸?shù)男畔⒎指顬楦〉南⒑蛶?并對(duì)它們采用二進(jìn)制格式的編碼,其中HTTP1.x的首部信息會(huì)被封裝到Headers幀,而我們的request body則封裝到Data幀里面。

客戶端和服務(wù)器可以把HTTP消息分解為互不依賴的幀,然后亂序發(fā)送,最后再在另一端把它們重新組合起來。注意,同一鏈接上有多個(gè)不同方向的數(shù)據(jù)流在傳輸??蛻舳丝梢砸贿厑y序發(fā)送stream,也可以一邊接收者服務(wù)器的響應(yīng),而服務(wù)器那端同理。

請(qǐng)求優(yōu)先級(jí)

多路復(fù)用導(dǎo)致所有資源都是并行發(fā)送,那么就需要「優(yōu)先級(jí)」的概念了,這樣就可以對(duì)重要的文件進(jìn)行先傳輸,加速頁面的渲染。

服務(wù)器推送

服務(wù)器推送是指在客戶端請(qǐng)求之前發(fā)送數(shù)據(jù)的機(jī)制。

另外有一點(diǎn)值得注意的是,客戶端如果退出某個(gè)業(yè)務(wù)場景,出于流量或者其它因素需要取消server push,也可以通過發(fā)送RST_STREAM類型的frame來做到。

HTTP2 實(shí)踐

這里使用 Node.js 作為服務(wù)器端語言。

1. 生成TLS證書

如果想要在生產(chǎn)環(huán)境中使用HTTP2,那么你可以去這里生成一個(gè)證書。

如果你僅僅開發(fā)環(huán)境使用,那么我們可以自己生成一個(gè)自簽名的TSL證書。

安裝OpenSSH

使用OpenSSH生成私鑰

openssl genrsa -des3 -passout pass:1234 -out server.pass.key 2048`

這里 1234 為私鑰密碼,如果你不想使用密碼,則可以去除私鑰密碼,敲入如下密令:

openssl rsa -passin pass:x -in server.pass.key -out server.key

創(chuàng)建 證書簽名請(qǐng)求
這里使用無密碼私鑰,如果使用帶密碼私鑰,只需將server.key更換為server.pass.key即可,密令如下

openssl req -new -key server.key -out server.csr

創(chuàng)建證書

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

通過以上四個(gè)步驟,我們得到了三個(gè)文件

server.key 你的TSL證書私鑰

server.csr 你的TSL證書簽名請(qǐng)求

server.crt 你的TSL證書

2. 使用Node.js 創(chuàng)建服務(wù)器

安裝 node-http2 模塊

npm install http2

創(chuàng)建服務(wù)器

var options = {
  key: fs.readFileSync("./server.key"),
  cert: fs.readFileSync("./server.crt")
};

require("http2").createServer(options, function(request, response) {
  response.end("Hello world!");
}).listen(8080);

啟動(dòng)服務(wù)器

node index.js

使用瀏覽器訪問

http://localhost:8080

到此,一個(gè)簡單的Demo就完成了。

Demo源碼下載

點(diǎn)擊這里訪問完整Demo

https://github.com/zhanyouwei...

測試結(jié)果對(duì)比

通過上面兩張截圖可以發(fā)現(xiàn),使用了HTTP2后,同樣的請(qǐng)求,在數(shù)據(jù)傳輸大小與速度上都有非常大的提升,幾乎可以預(yù)見,不久的將來,HTTP2將會(huì)大放異彩。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79421.html

相關(guān)文章

  • 前端系列——nodejs環(huán)境下http2初嘗試

    摘要:基礎(chǔ)理論是二進(jìn)制協(xié)議這是一個(gè)復(fù)用協(xié)議。使用現(xiàn)狀案例淘寶案例京東案例知乎案例二月的公司不好意思,我們還沒用上這么牛逼的協(xié)議。本文內(nèi)容很淺,想要了解更多的知識(shí),可以去知乎搜相關(guān)文章和回答。 目的 http2出來也有段時(shí)間了,很多網(wǎng)站都已經(jīng)實(shí)際應(yīng)用了它,而我還活在http1.1的時(shí)代,趁著還年輕,記性還行,花點(diǎn)時(shí)間研究了http2在nodejs中的使用。 http2基礎(chǔ)理論 HTTP2是二...

    bigdevil_s 評(píng)論0 收藏0
  • 前端基本功-常見概念(一)

    摘要:前端基本功常見概念一點(diǎn)這里前端基本功常見概念二點(diǎn)這里前端基本功常見概念三點(diǎn)這里什么是原型鏈當(dāng)一個(gè)引用類型繼承另一個(gè)引用類型的屬性和方法時(shí)候就會(huì)產(chǎn)生一個(gè)原型鏈。函數(shù)式編程是聲明式而不是命令式,并且應(yīng)用程序狀態(tài)通過純函數(shù)流轉(zhuǎn)。 前端基本功-常見概念(一) 點(diǎn)這里前端基本功-常見概念(二) 點(diǎn)這里前端基本功-常見概念(三) 點(diǎn)這里 1.什么是原型鏈 當(dāng)一個(gè)引用類型繼承另一個(gè)引用類型的屬性和方...

    bladefury 評(píng)論0 收藏0
  • 面試必考之http狀態(tài)碼有哪些

    摘要:背景狀態(tài)碼有哪些,這也是一個(gè)很高頻的面試問題??偨Y(jié)僅僅三個(gè)狀態(tài)碼,都可以牽涉到如此豐富的知識(shí),對(duì)于狀態(tài)碼,我們不能只是片面的去背誦狀態(tài)碼及對(duì)應(yīng)的含義,要去主動(dòng)挖掘,深入,借助狀態(tài)碼來建立自己的網(wǎng)絡(luò)體系。 背景 http狀態(tài)碼有哪些,這也是一個(gè)很高頻的面試問題。一般大家都知道404頁面不存在,500服務(wù)器錯(cuò)誤,301重定向,302臨時(shí)重定向,200ok,401未授權(quán)啥的。 如果只是簡單的...

    wing324 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<