http2的觀念

2018-02-24 16:00 更新

5. http2的基本概念

http2到底做了些什么呢?到多遠(yuǎn)才是HTTPbis小組工作的界限?

事實(shí)上,http2的界定非常嚴(yán)格,讓小組的工作頗為掣肘。

  • [X] 它必須維持HTTP的范式。畢竟它只是一個(gè)讓客戶端發(fā)送請(qǐng)求到服務(wù)器的基于TCP的協(xié)議。

  • [X] 不能改變http://https://這樣的URL,也不能對(duì)其添加新的結(jié)構(gòu)。使用這類URL的網(wǎng)站太多了,沒法指望他們?nèi)扛淖儭?/p>

  • [X] HTTP1的服務(wù)器和客戶端依然會(huì)存在很久,所以我們必須提供HTTP1到http2服務(wù)器的代理。

  • [X] 隨后,我們也要讓這種代理能夠?qū)ttp2的功能一對(duì)一的映射到HTTP 1.1的客戶端。

  • [X] 刪除或者減少協(xié)議里面那些可選的部分。雖然這并不是一個(gè)大的需求,但是SPDY和Google的團(tuán)隊(duì)會(huì)非常喜歡這點(diǎn)。讓協(xié)議里所有部分都成為強(qiáng)制要求的,就能防止人們?cè)趯?shí)現(xiàn)的時(shí)候偷懶,從而避免將來的問題。

  • [X] 不再使用小版本號(hào)。服務(wù)器和客戶端都必須確定自己是否完整兼容http2或者徹底不兼容。如果將來該協(xié)議需要被擴(kuò)充更變,那么新的協(xié)議將會(huì)是http3,而不是http 2.x。

5.1. http2和現(xiàn)有的URI結(jié)構(gòu)

如前所述,現(xiàn)有的URI結(jié)構(gòu)正在被HTTP 1.x使用而不能改變,所以http2也必須沿用該結(jié)構(gòu)。正因如此我們才必須找到一種方式將協(xié)議升級(jí)至http2,或者讓服務(wù)器使用http2來徹底替代舊的協(xié)議。

HTTP 1.1本身就有制定“升級(jí)”的方案:提供一個(gè)頭,讓服務(wù)器在收到舊協(xié)議請(qǐng)求的時(shí)候,向客戶端發(fā)送新協(xié)議的響應(yīng)。這樣做的代價(jià)是需要一次往返通信。

這個(gè)往返通信的代價(jià)是SPDY團(tuán)隊(duì)不能接受的。因?yàn)樗麄冎粚?shí)現(xiàn)了基于TLS的SPDY,所以他們也只開發(fā)了一個(gè)TLS的擴(kuò)展來簡(jiǎn)化協(xié)議的協(xié)商。這個(gè)擴(kuò)展被稱作NPN(Next Protocol Negotiation),通過它,服務(wù)器通知客戶端所有他支持的協(xié)議,從而讓客戶端從中選擇一個(gè)合適的。

5.2. 為https://所準(zhǔn)備的http2

足夠的關(guān)注使得http2在TLS上得以正常運(yùn)作,SPDY只支持TLS,所以按理說TLS也應(yīng)成為http2 必需的組件,但出乎意料的是http2僅將TLS作為可選部分。然而,全球兩大瀏覽器領(lǐng)導(dǎo)者 - Firefox和Chrome明確地表示,他們只實(shí)現(xiàn)基于TLS的http2.

只選擇TLS的原因包括了保護(hù)用戶隱私,早期的評(píng)估結(jié)果表明,將新的協(xié)議建立在TLS上更可能成功。這也是因?yàn)樗衼碜?0端口的流量都會(huì)被當(dāng)作HTTP 1.1或者是其某個(gè)變種,而不是另外一個(gè)種全新的協(xié)議。

關(guān)于是否該強(qiáng)制使用TLS的主題在郵件組和會(huì)議上引起了不小的爭(zhēng)議 - 這到底是好是壞呢?不管怎么樣,對(duì)于這種備受爭(zhēng)議的話題請(qǐng)謹(jǐn)慎討論,尤其是當(dāng)你面對(duì)一個(gè)HTTPbis小組成員的時(shí)候。

類似地,還有一個(gè)激烈而長(zhǎng)期的辯論,即當(dāng)使用TLS時(shí)http2是否應(yīng)該強(qiáng)制規(guī)定密碼列表,或者應(yīng)該建立一個(gè)黑名單,或者它根本就不需要從TLS層得到任何東西,而由TLS工作組來解決。最后規(guī)范指定TLS最低版本是1.2,并且有加密組的限制。

5.3 基于TLS之上的http2協(xié)商

Next Protocol Negotiation (NPN)是一個(gè)用來在TLS服務(wù)器上協(xié)商SPDY的協(xié)議。IETF將這個(gè)非正式標(biāo)準(zhǔn)進(jìn)行規(guī)范,從而變成了ALPN(Application Layer Protocol Negotiation)。ALPN被推廣用于http2,而SPDY客戶端和服務(wù)器仍然使用NPN。

由于NPN先誕生,而ALPN還經(jīng)歷了一些標(biāo)準(zhǔn)化過程。所以許多早期的http2客戶端和服務(wù)器在協(xié)商http2時(shí)同時(shí)實(shí)現(xiàn)了這兩者的擴(kuò)展。并且,由于SPDY使用NPN,不少服務(wù)器同時(shí)提供SPDY和http2來支持NPN和APLN。

ALPN和NPN的主要區(qū)別在于誰持有會(huì)話協(xié)議的決定權(quán),ALPN是由客戶端給服務(wù)器發(fā)送一個(gè)協(xié)議優(yōu)先級(jí)列表,由服務(wù)器最終選擇一個(gè)合適的。而NPN則正好相反,是客戶端有最終決定權(quán)。

5.4 為http://所準(zhǔn)備的http2

如前所述,對(duì)于純文本的HTTP1.1來說,協(xié)商http2的方法就是給服務(wù)器發(fā)送一個(gè)帶升級(jí)頭部的報(bào)文。如果服務(wù)器支持http2,它將回復(fù)“101 Switching”狀態(tài)碼,并從此開始在該連接上使用http2。也許你很容易就發(fā)現(xiàn)這個(gè)升級(jí)流程會(huì)造成一個(gè)完整的往返時(shí)延開銷,但好處是http2連接相比HTTP1可以被更大限度地重用和保持。

雖然有些瀏覽器廠商的發(fā)言人宣稱他們不會(huì)實(shí)現(xiàn)這種http2會(huì)話方式,但I(xiàn)E團(tuán)隊(duì)已公開表示他們會(huì)實(shí)現(xiàn),與此同時(shí),curl已經(jīng)支持該方式。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)