怎么啟用HTTP/2

這篇文章主要講解了“怎么啟用HTTP/2”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么啟用HTTP/2”吧!

站在用戶的角度思考問題,與客戶深入溝通,找到鹿城網(wǎng)站設(shè)計(jì)與鹿城網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋鹿城地區(qū)。

HTTP歷史

HTTP/0.9是個(gè)相當(dāng)簡(jiǎn)單的協(xié)議,它只有一個(gè)GET方法,沒有首部。HTTP/1 新增了大量?jī)?nèi)容:首部,晌應(yīng)碼,重定向,錯(cuò)誤,條件請(qǐng)求,內(nèi)容編碼,更多的請(qǐng)求方法。HTTP/1.1強(qiáng)制增加host首部,增加緩存相關(guān)首部,傳輸編碼,默認(rèn)持久連接等。HTTP2基于google的SPDY,基本就是SPDY規(guī)范化,2015年HTIP/2 成為正式協(xié)議。0.9-2的協(xié)議都是基于tcp協(xié)議。為什么http3會(huì)有基于udp實(shí)現(xiàn)的討論?即使基于udp也仍然要在應(yīng)用程序重復(fù)實(shí)現(xiàn)tcp已經(jīng)實(shí)現(xiàn)的可靠連接,擁塞控制等特性?;趗dp實(shí)現(xiàn)的考慮是傳輸層協(xié)議內(nèi)置在操作系統(tǒng)里實(shí)現(xiàn),應(yīng)用層開發(fā)人員沒有對(duì)它的控制權(quán),如果能將tcp這些特性移到應(yīng)用層,就可以快速發(fā)展迭代。

HTTP/1.1問題

1.隊(duì)頭阻塞

HTTP協(xié)議是建立在TCP協(xié)議之上請(qǐng)求應(yīng)答模式的半雙工通信協(xié)議,而瀏覽器很少只從一個(gè)域名獲取一份資源,大多數(shù)時(shí)候,它希望能同時(shí)獲取許多資源。假設(shè)客戶端與服務(wù)器開啟一條TCP連接通信,客戶端需要獲取10個(gè)資源,只能是一個(gè)個(gè)的獲取??蛻舳耸紫日?qǐng)求第1個(gè)資源,接收到服務(wù)端響應(yīng)后再繼續(xù)請(qǐng)求第2個(gè),依此類推,如果獲取第一個(gè)資源比較慢就會(huì)阻塞后面的請(qǐng)求。客戶端要想發(fā)起多個(gè)并行請(qǐng)求以提升性能,則必須使用多個(gè) TCP 連接,但是每個(gè)連接仍會(huì)受到“隊(duì)頭阻塞”的影響?,F(xiàn)代瀏覽器會(huì)針對(duì)單個(gè)域名開啟6個(gè)TCP連接。一個(gè)客戶端對(duì)任何服務(wù)器或代理最多只能維護(hù)2條持久連接,以防服務(wù)器過載。

2.低效的TCP利用

如果沒有開啟keepalive則每個(gè)請(qǐng)求都會(huì)重復(fù)TCP連接建立的過程,即三次握手和四次握手。開啟keepalive后主要是TCP擁塞控制的影響。

3.臃腫的首部

1.1版本無法壓縮首部,首部通常有很多,并且如果帶有cookie則會(huì)更大。

4.無法指定優(yōu)先級(jí)

5.第三方資源

Web頁面上請(qǐng)求的很多資源完全獨(dú)立于站點(diǎn)服務(wù)器的控制,我們稱這些為第三方資源。很多第三方資源都不在 Web 開發(fā)者的控制范圍內(nèi),所以很可能其中有些資源的性能很差,會(huì)延遲甚至阻塞頁面誼染。

怎么啟用HTTP/2

HTTP/2特性

二進(jìn)制協(xié)議

HTTP/1.1是文本協(xié)議,而HTTP/2是二進(jìn)制協(xié)議。經(jīng)過網(wǎng)絡(luò)傳輸必然是都二進(jìn)制,這里所謂文本協(xié)議,二進(jìn)制協(xié)議的意思應(yīng)當(dāng)是報(bào)文的內(nèi)容。HTTP/1.1中request line和header都是ASCII編碼,而body內(nèi)容類型依據(jù)content-type判斷,并且判定body是否結(jié)束是根據(jù)content-length或者分塊傳輸,要解析整個(gè)HTTP報(bào)文內(nèi)容,都是根據(jù)文本字符CRLF來解析。所以HTTP/1.1的報(bào)文是經(jīng)過文本編碼的二進(jìn)制再交付給TCP傳輸。HTTP/2中保留了HTTP/1.1 的語義(包括各種動(dòng)詞、方法、首部),不同的是傳輸期間對(duì)它們的編碼方式變了。HTTP/2 將所有傳輸?shù)男畔⒎指顬楦〉南⒑蛶?,并采用二進(jìn)制格式對(duì)它們編碼。

+-----------------------------------------------+
    |                 Length (24)                   |
    +---------------+---------------+---------------+
    |   Type (8)    |   Flags (8)   |
    +-+-------------+---------------+-------------------------------+
    |R|                 Stream Identifier (31)                      |
    +=+=============================================================+
    |                   Frame Payload (0...)                      ...
    +---------------------------------------------------------------+

其中l(wèi)ength占用24bit,表示payload數(shù)據(jù)的長(zhǎng)度,24bit能表示的數(shù)值為0到$2^{24}$-1,而1mb=$2^{20}$,所以理論上payload最大是$2^4$mb,$2^{14}$是默認(rèn)的最大幀大小。這樣服務(wù)器只需要讀取到length與type,也就是前9個(gè)字節(jié),就只可以知道數(shù)據(jù)的長(zhǎng)度,以及數(shù)據(jù)幀的類型。

可以理解為http協(xié)議的各種請(qǐng)求方法,首部語義都保留了,區(qū)別在于,HTTP/1.1是把這些明文內(nèi)容使用CRLF分隔直接傳輸,而HTTP/2則對(duì)明文內(nèi)容封裝到幀的payload里面。

請(qǐng)求與響應(yīng)復(fù)用

HTTP/2 的主要目標(biāo)是通過支持完整的請(qǐng)求與響應(yīng)復(fù)用來減少延遲,HTTP/2只會(huì)建立并復(fù)用一條TCP連接??蛻舳撕头?wù)器可以將 HTTP 消息分解為互不依賴的幀,然后交錯(cuò)發(fā)送,最后再在另一端把它們重新組裝起來(根據(jù)Stream Identifier區(qū)分)。客戶端可以并行交錯(cuò)地發(fā)送多個(gè)請(qǐng)求,請(qǐng)求之間互不影響。服務(wù)器端可以并行交錯(cuò)地發(fā)送多個(gè)響應(yīng),響應(yīng)之間互不干擾。

連接管理

大多數(shù) HTTP 傳輸都是短暫的,而 TCP 則針對(duì)長(zhǎng)時(shí)間的批量數(shù)據(jù)傳輸進(jìn)行了優(yōu)化。 通過重用相同的連接,HTTP/2 既可以更有效地利用每個(gè) TCP 連接,也可以顯著降低整體協(xié)議開銷。

HTTP/1.1的持久連接是有超時(shí)時(shí)間的,HTTP/2沒有超時(shí)時(shí)間的概念,它可以被認(rèn)為是永久連接的,但是不可能是一直連著的,即使HTTP沒有明確規(guī)定超時(shí),TCP也有超時(shí)的。所以如何理解這個(gè)永久呢?

HTTP/2 connections are persistent. For best performance, it is expected that clients will not close connections until it is determined that no further communication with a server is necessary (for example, when a user navigates away from a particular web page) or until the server closes the connection.

Servers are encouraged to maintain open connections for as long as possible but are permitted to terminate idle connections if necessary.

HTTP/2連接是持久的,為了最好的性能,客戶端不應(yīng)當(dāng)關(guān)閉連接,直到它認(rèn)為不需要與服務(wù)器進(jìn)行進(jìn)一步的通信(例如,當(dāng)用戶從一個(gè)特定的網(wǎng)頁導(dǎo)航離開時(shí))或者直到服務(wù)器關(guān)閉連接。服務(wù)端也應(yīng)當(dāng)盡可能長(zhǎng)的保持連接,但是也允許服務(wù)器主動(dòng)關(guān)閉連接釋放資源。

數(shù)據(jù)流優(yōu)先級(jí)

HTTP/2 標(biāo)準(zhǔn)允許每個(gè)數(shù)據(jù)流都有一個(gè)關(guān)聯(lián)的權(quán)重和依賴關(guān)系。

首部壓縮

HTTP/2 使用 HPACK 壓縮格式壓縮請(qǐng)求和響應(yīng)標(biāo)頭元數(shù)據(jù)。

流控制

流控制是一種阻止發(fā)送方向接收方發(fā)送大量數(shù)據(jù)的機(jī)制,以免超出后者的需求或處理能力: 發(fā)送方可能非常繁忙、處于較高的負(fù)載之下,也可能僅僅希望為特定數(shù)據(jù)流分配固定量的資源。 例如,客戶端可能請(qǐng)求了一個(gè)具有較高優(yōu)先級(jí)的大型視頻流,但是用戶已經(jīng)暫停視頻,客戶端現(xiàn)在希望暫?;蛳拗茝姆?wù)器的傳輸,以免提取和緩沖不必要的數(shù)據(jù)。 再比如,一個(gè)代理服務(wù)器可能具有較快的下游連接和較慢的上游連接,并且也希望調(diào)節(jié)下游連接傳輸數(shù)據(jù)的速度以匹配上游連接的速度來控制其資源利用率;等等。

服務(wù)器推送

服務(wù)器可以對(duì)一個(gè)客戶端請(qǐng)求發(fā)送多個(gè)響應(yīng),除了對(duì)最初請(qǐng)求的響應(yīng)外,服務(wù)器還可以向客戶端推送額外資源。這里的推送并不意味著可以全雙工通信了,可以替換websocket,前提是客戶端主動(dòng)發(fā)起一次請(qǐng)求才可以。另外,在使用 nginx 作為反向代理時(shí)根本不支持這種推送。

啟用HTTP/2

HTTP/2 over https,因此要啟用HTTP/2,必須現(xiàn)在服務(wù)器配好證書。要啟用HTTP/2無非就是需要客戶端與服務(wù)器都支持HTTP/2通信協(xié)議,幾乎每個(gè)現(xiàn)代的瀏覽器和版本高一點(diǎn)的web服務(wù)器都支持 HTTP/2。只需要服務(wù)器開啟HTTP/2,客戶端會(huì)優(yōu)先使用HTTP/2連接,如果服務(wù)器不支持HTTP/2,則會(huì)退回到HTTP/1.1 。

現(xiàn)代服務(wù)端部署方式通常不只有一個(gè)web服務(wù)器,從瀏覽器發(fā)出的請(qǐng)求到最終接口獲取數(shù)據(jù),中間可能存在諸多代理,比如云服務(wù)的slb,gateway,k8s ingress,后端服務(wù)tomcat等,問題在于是否需要全鏈路啟用HTTP/2?如果后端服務(wù)器tomcat啟用HTTP/2,但是中間nginx沒有啟用,本質(zhì)上還是相當(dāng)于沒有啟用。這個(gè)問題可以類比https,通常我們只會(huì)在整個(gè)鏈路的最邊緣節(jié)點(diǎn)配置一次https,由于最邊緣節(jié)點(diǎn)到后端服務(wù)幾乎是內(nèi)網(wǎng)訪問,不存在中間人攻擊問題,所以從最邊緣節(jié)點(diǎn)到后端服務(wù)完全沒有必要再次加密解密。

HTTP/2 的主要優(yōu)點(diǎn)是可以提升高延遲、低帶寬連接的速度,連接到邊緣服務(wù)器(在這種情況下為反向代理)的用戶通常處在這樣的網(wǎng)絡(luò)環(huán)境下。從反向代理到其他 Web 基礎(chǔ)架構(gòu)的流量一般處于低延遲、高帶寬、短距離的網(wǎng)絡(luò)環(huán)境中(即使不是同一臺(tái)機(jī)器,也通常是相同的數(shù)據(jù)中心),因此此場(chǎng)景下通常不需要考慮 HTTP/1.1 的性能問題。

反向代理到服務(wù)器的連接數(shù)不受限于瀏覽器設(shè)置的 6 個(gè)連接。Nginx 已經(jīng)聲明,它不會(huì)為代理連接實(shí)現(xiàn)HTTP/2。

綜上,如果要啟用HTTP/2,只在最邊緣節(jié)點(diǎn)啟用就可以了。

感謝各位的閱讀,以上就是“怎么啟用HTTP/2”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)怎么啟用HTTP/2這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

當(dāng)前標(biāo)題:怎么啟用HTTP/2
鏈接分享:http://muchs.cn/article48/pdgsep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)公司、用戶體驗(yàn)全網(wǎng)營(yíng)銷推廣、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)