http2的概念 · http2講解

2018-06-30 19:18 更新

5. http2的基本概念

http2到底做了些什么呢?而HTTPbis小組究竟又應該把它制定到什么樣的程度呢?

+

事實上,http2有著非常嚴格的邊界,這也給小組成員的創(chuàng)新帶來了些許限制。

+

  • http2必須維持HTTP的范式。畢竟它只是一個讓客戶端發(fā)送請求到服務器的基于TCP的協(xié)議。

    +

  • 不能改變 http:// 和 https:// 這樣的URL,也不能對其添加新的結構。使用這類URL的網站太多了,沒法指望他們全部改變。

    +

  • HTTP1的服務器和客戶端依然會存在很久,所以我們必須提供HTTP1到http2服務器的代理。

    +

  • 隨后,我們也要讓這種代理能夠將http2的功能一對一的映射到HTTP 1.1的客戶端。

    +

  • 刪除或者減少協(xié)議里面那些可選的部分。雖然這并不算的上是一個需求,但是SPDY和Google的團隊都非常喜歡這點。通過讓協(xié)議里所有的內容都成為了強制性要求,可以防止人們在實現(xiàn)的時候偷懶,從而規(guī)避一些將來可能會發(fā)生的問題。

    +

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

    +

5.1. http2和現(xiàn)有的URI結構

如上所述,現(xiàn)有的URI結構正在被HTTP 1.x使用而不能被更換,所以http2也必須沿用該結構。因此不得不找到一種方式將使用的協(xié)議升級至http2,比如可以要求服務器讓它作響應時使用http2來替代舊的協(xié)議。

+

HTTP 1.1本身就制定過“升級”的方案:提供一個首部字段,表示允許服務器在收到舊協(xié)議請求的同時,可以向客戶端發(fā)送新協(xié)議的響應。但這一方案往往需要花費一次額外的往返通信來作為升級的代價。

+

而這一代價是SPDY團隊不想接受的。因為他們只實現(xiàn)了基于TLS的SPDY,所以他們開發(fā)了一個TLS的擴展去簡化協(xié)議的協(xié)商。這個擴展被稱作NPN(Next Protocol Negotiation),借助于此,服務器會通知客戶端所有它支持的協(xié)議,讓客戶端從中選擇一個合適的來進行通訊。

+

5.2. 為 https:// 所準備的http2

有相當多的人關注到了http2可以在TLS上正常的運作,而SPDY依賴于TLS,所以按理說TLS也應成為http2 必需的組件,不過出乎大家意料的是http2將TLS標記成了可選。然而,全球兩大瀏覽器領導者 —— Firefox和Chrome都明確地表示,他們只會實現(xiàn)基于TLS的http2.

+

選擇TLS的原因的其中之一是希望保護以及尊重用戶的隱私,而早期的評估結果也表明,在TLS上建立新的協(xié)議更有可能獲得成功。而這其中部分原因是人們普遍認為任何來自80端口的流量都是基于HTTP 1.1亦或者是其某個變種的,而不是另外一種全新的協(xié)議。

+

關于是否應該強制使用TLS的主題在郵件組內和會議上引起了不小的爭議 —— 這到底是好是壞呢?不管怎么樣,對于這種備受爭議的話題還是請謹慎討論,尤其是當你面對一個HTTPbis小組成員的時候。

+

諸如此類,還有一個激烈而長期的討論,即:如果選擇了使用TLS,那http2是否應該強制規(guī)定密碼列表,也許應該建立起一個黑名單,又或者它根本就不需要從TLS層得到任何東西。不過這個問題還是留給TLS工作組去解決吧,最后的規(guī)范中指定了TLS最低版本為1.2,并且會有加密組的限制。

+

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

Next Protocol Negotiation (NPN)是一個用來在TLS服務器上協(xié)商SPDY的協(xié)議。IETF將這個非正式標準進行規(guī)范化,從而演變成了ALPN(Application Layer Protocol Negotiation)。ALPN會隨著http2的應用被推廣,而SPDY的客戶端與服務器則會繼續(xù)使用NPN。

+

由于NPN先于ALPN誕生,而ALPN又經歷了一些標準化過程,所以許多早期的http2客戶端和服務器在協(xié)商http2時會將這兩者同時實現(xiàn)。與此同時,考慮到SPDY會使用NPN,而許多服務器又會同時提供SPDY以及http2,所以在這些服務器上同時支持ALPN以及NPN顯然會成為最理所當然的選擇。

+

ALPN和NPN的主要區(qū)別在于:誰來決定通信協(xié)議。在ALPN的描述中,是讓客戶端先發(fā)送一個協(xié)議優(yōu)先級列表給服務器,由服務器最終選擇一個合適的。而NPN則正好相反,客戶端有著最終的決定權。

+

5.4 為 http:// 所準備的http2

正如我們之前所提到的,對于純文本的HTTP1.1來說,協(xié)商http2的方法就是通過給服務器發(fā)送一個帶升級頭部的報文。如果服務器支持http2,它將以“101 Switching”作為回復的狀態(tài)碼,并從此開始在該連接上使用http2。也許你很容易就發(fā)現(xiàn)這樣一個升級的流程會需要消耗掉一整個的往返時延,但好處是http2連接相比HTTP1可以被更大限度地重用和保持。

+

雖然有些瀏覽器廠商的發(fā)言人宣稱他們不會實現(xiàn)這樣的http2會話方式,但IE團隊已公開表示他們會實現(xiàn),與此同時,curl也已經支持了這種方式。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號