http2的世界

2018-02-24 16:00 更新

8. http2的世界

那么當(dāng)http2被廣泛采用的時候,世界會成怎么樣呢?或者它會被廣泛采用嗎?

8.1. http2會如何影響普通人?

現(xiàn)在http2還沒被大范圍部署使用,我們也無法確定到底會發(fā)生什么變化,但至少可以參考SPDY的例子和曾經(jīng)做過的實驗來進行大概估計。

http2減少了網(wǎng)絡(luò)往返傳輸?shù)臄?shù)量,并且用多路復(fù)用和快速丟棄不需要的流的辦法來完全避免了head of line blocking的困擾。

它也支持大量并行流,所以即使網(wǎng)站的數(shù)據(jù)分發(fā)在各處也不是問題。

合理利用流的優(yōu)先級,可以讓客戶端盡可能優(yōu)先收到更重要的數(shù)據(jù)。

所有這些加起來,我認(rèn)為頁面載入時間和站點相應(yīng)的速度都會更快。簡而言之:更好的web體驗。

但到底能變得多快,到底提升有多大呢?我認(rèn)為目前很難說清楚。畢竟這些技術(shù)依然在早期,我們還沒法看見客戶端和服務(wù)器實現(xiàn)這些并真正受益于新協(xié)議所提供的強大功能。

8.2. http2會如何影響web開發(fā)?

近年來,web開發(fā)者、web開發(fā)環(huán)境為一些HTTP 1.1的問題提供了臨時解決方案。不妨回憶一下,其中一些我已在上文中簡單的介紹了。

這些解決方案很多是工具和開發(fā)者默認(rèn)使用的,這很可能會損害到http2的性能,或者至少讓我們沒法真正利用到http2新提供的強大威力。Spriting和內(nèi)聯(lián)應(yīng)該是http2里面最不需要的了。因為http2更傾向于使用更少的連接,所以Sharding甚至?xí)Φ絟ttp2的性能。

這里的問題就是:web網(wǎng)站和web開發(fā)們至少在短期內(nèi)需要同時支持HTTP 1.1和http2的客戶端。否則的話,使所有用戶獲得最好的體驗將是一個挑戰(zhàn)。

考慮到這些問題,我認(rèn)為距離http2的潛力被徹底發(fā)掘還有很長一段路要走。

8.3. http2的實現(xiàn)

在這樣一篇文章中詳細說明每個實現(xiàn)細節(jié)注定乏味且毫無意義,我將用更廣泛的術(shù)語解釋實際場景,給大家提供一個http2的實現(xiàn)列表作為參考。

在http2的早期就已經(jīng)有大量的實現(xiàn)。并且在http2標(biāo)準(zhǔn)化工作期間,這個數(shù)量還持續(xù)增長。截至我寫這篇文檔的時候,共有30種實現(xiàn)記錄在案,他們中的大多數(shù)都實現(xiàn)了最新的草案。

Firefox一直緊跟最新的協(xié)議,Twitter也緊追不舍提供了基于http2的服務(wù)。2014年4月期間,Google在少數(shù)測試服務(wù)器上提供http2支持。從同年5月開始,開發(fā)版的Chrome支持http2。Microsoft也在他們的產(chǎn)品預(yù)發(fā)布會上展示了支持http2的下一代瀏覽器。

curl和libcurl支持未加密的http2,同時借助某些TLS庫支持了TLS。

draft-17是當(dāng)前最新的草案版本,它二進制兼容draft-14。后者是最近一個被標(biāo)記為實現(xiàn)/互操作的草案。但是當(dāng)draft-17 進行線上二進制兼容的時候,草案的語言的改變也造成了他們的些許不同。

8.3.1. 缺失的實現(xiàn)

現(xiàn)有的實現(xiàn)列表中仍然有明星品牌缺席。目前尚未聽到Apple官方有讓Safari支持http2的計劃。Apache HTTPD和Nginx這兩大流行的服務(wù)器都提供SPDY的支持,但卻沒有對提供http2的支持進行任何表態(tài)。

Nginx表示“我們計劃于2015年末發(fā)布帶有HTTP/2支持的nginx和NGINX Plus”。而Apache已經(jīng)有一個非常早期的HTTP/2模塊,叫作mod_h2。

8.4. 對http2的常見批評

在制定協(xié)議的討論過程中有許多充滿爭議的地方,甚至?xí)胁簧偃苏J(rèn)為這樣的協(xié)議最終會以失敗告終。這里我想提一些對協(xié)議常見的批評和我的解釋:

8.4.1. “這個協(xié)議是Google設(shè)計制定的”

江湖上有太多傳言暗示著這個世界越來越被Google所控制,但事實顯然不是這樣。這個協(xié)議是IETF制定的,就跟過去30年間很多其他協(xié)議一樣。但不得不承認(rèn),SPDY是Google非常出色的成果。它不僅僅證明了開發(fā)一個新協(xié)議的可行性,還充分展現(xiàn)了新協(xié)議能帶來的好處。

Google公開聲明了他們會在2016年移除Chrome里對SPDY和NPN的支持,并且極力推動服務(wù)器遷移至HTTP/2。

8.4.2. “這個協(xié)議只在瀏覽器上有用”

在某種程度上,這是對的。開發(fā)http2的一個主要動機就是修復(fù)HTTP pipelining。如果在你的應(yīng)用場景里本來就不需要pipelining,那么確實很有可能http2對你沒有太大幫助。雖然這并不是唯一的提升,但顯然這是非常重要的一個。

一旦當(dāng)某些服務(wù)意識到在一個連接上建立多路復(fù)用流的強大威力時,我認(rèn)為會有越來越多的程序采用http2。

小規(guī)模的REST API和采用HTTP 1.x的簡單程序可能不會認(rèn)為遷移到http2能有多大的優(yōu)勢。但至少http2對絕大部分用戶來講,是幾乎沒有壞處的。

8.4.3. “這個協(xié)議只對大型網(wǎng)站有用”

完全不是這樣。因為缺乏內(nèi)容分發(fā)網(wǎng)絡(luò),小網(wǎng)站的網(wǎng)絡(luò)延遲往往較高,而多路復(fù)用的能力可以極大的改善在高網(wǎng)絡(luò)延遲下的體驗。大型網(wǎng)站往往已經(jīng)將內(nèi)容分發(fā)到各處,所以速度其實更快。

8.4.4. “TLS讓速度變得更慢”

這個評價在某種程度上是對的。雖然TLS的握手確實增加了額外的開銷,但也有越來越多的方案來減少TLS往返的時間。使用TLS而不是純文本帶來的開銷是顯著的,有可觀證據(jù)表明,和傳輸同樣的流量相比,TLS會消耗更多的CPU和其他資源。具體影響有多大以及怎么影響是一個和具體測量有關(guān)的課題。更多的例子可以參看istlsfastyet.com。

Telecom和一些其他網(wǎng)絡(luò)服務(wù)商,例如ATIS開放網(wǎng)絡(luò)聯(lián)盟,表示為了為衛(wèi)星、飛機等提供的快速網(wǎng)絡(luò)體驗,他們需要一些不加密的流量來提供caching,壓縮和其他技術(shù)。

http2并不強制要求使用TLS,所以我們不應(yīng)該為此擔(dān)心。

如今,很多互聯(lián)網(wǎng)使用者已經(jīng)更希望TLS能被更廣泛的使用來保護用戶隱私。

實驗也證明了通過使用TLS能比用在80端口實現(xiàn)一個新的基于文本的協(xié)議更容易成功。因為當(dāng)前已經(jīng)有太多中間商使用該方案,所以凡是基于80端口的協(xié)議,都很可能被理所當(dāng)然的當(dāng)作HTTP 1.1。

最后,得益于http2在單一連接上提供的多路復(fù)用流,普通瀏覽器的正常使用也可以減少TLS握手的次數(shù),所以使用HTTPS仍然會比HTTP 1.1更快。

8.4.5. “不基于ASCII是沒法忍受的”

雖然當(dāng)我們可以直接讀出協(xié)議內(nèi)容的時候,調(diào)試和追蹤都會變得更簡單。但基于文本的協(xié)議更容易產(chǎn)生錯誤,造成更多解析的問題。

如果你真的無法接受二進制協(xié)議,那么你也無法在HTTP 1.x中處理TLS和壓縮。而這些技術(shù)其實已經(jīng)被使用了很久了。

8.4.6. “它根本沒有比HTTP/1.1快”

當(dāng)然,到底該如何定義和測量“快”就是另外一個話題了,但在SPDY的時代,已經(jīng)有一些實驗證明了該協(xié)議會讓瀏覽器載入頁面更快(例如華盛頓大學(xué)的“SPDY有多快?”和Hervé Servy的“評估啟用SPDY的Web服務(wù)器性能”),同樣這些實驗也被用來證明http2。我期待能有越來越多的測試實驗發(fā)布。httpwatch.com也有進行一個簡單的測試來證明HTTP/2名副其實。

http2在很多的場景下都證明了自己更快,尤其是在包含非常多資源的高延遲的連接上。而正如之前的章節(jié)中提到,目前的趨勢就是每個網(wǎng)站包含越來越多的資源和數(shù)據(jù)。

8.4.7. “它違反了網(wǎng)絡(luò)分層”

你確定這也是反對的理由么?網(wǎng)絡(luò)分層并不是不可侵犯的。如果我們在制定http2的時候已經(jīng)踏入了灰色地帶,那我們當(dāng)然可以嘗試在限制內(nèi)制定出更好更高效的協(xié)議。

8.4.8. “它并沒有修復(fù)很多HTTP/1.1的問題”

確實是這樣。兼容HTTP/1.1的范式是我們的目標(biāo)之一,所以一些老的HTTP功能仍然被保留。例如一些常用的協(xié)議頭、可怕的cookies、驗證頭等等。但保留這些范式的好處就是我們在升級到新協(xié)議的時候少掉很多工作,也不需要重寫很多底層的東西。Http2其實只是一個新的幀層。

8.5. http2會被廣泛部署嗎?

現(xiàn)在還言之尚早,但我仍然要在這里做出我的預(yù)估。

很多懷疑論者會以“看看IPv6現(xiàn)在的德性”為讓我們回想起這個經(jīng)歷了10多年才開始慢慢被采用的協(xié)議。但http2畢竟不是IPv6。他是一個建立在TCP之上的使用HTTP更新機制、端口號和TLS等的協(xié)議。大部分路由器或者防火墻不需要為此而進行更改。

Google向世界展示了他們的SPDY,證明了像這樣的新協(xié)議也能在足夠短的時間內(nèi)擁有多種實現(xiàn),并且能被瀏覽器和服務(wù)所采用。雖然如今支持SPDY服務(wù)器端數(shù)量在1%以內(nèi),但通過這些服務(wù)器所交換的數(shù)據(jù)卻要大很多。很多非常流行的網(wǎng)站現(xiàn)在也有提供SPDY支持。

我認(rèn)為建立在SPDY的基本范式之上的http2會被更廣泛的部署,畢竟它是IETF制定的協(xié)議。而SPDY因為背負了“它是Google的協(xié)議”這個惡名,導(dǎo)致它的發(fā)展總是畏首畏腳。

在它首次發(fā)布的幕后有很多大型瀏覽器支持。來自Freifox,Chrome和IE的代表宣布了他們會發(fā)布支持http2特性的瀏覽器,并且他們已經(jīng)演示了一些能正常運作的實現(xiàn)。

也有很多像Google,Twitter和Facebook這樣的大公司希望盡快支持http2,所以我們可以期待著很快能有支持http2的服務(wù)器(例如Apache HTTP Server和nginx)。H2o作為一個極有潛力的新生HTTP服務(wù)器,也同樣支持http2。

那些大型代理程序開發(fā)者,例如HAProxy、Squid和Varnish也表示出了他們對支持http2的興趣。

我也相信一旦規(guī)范被RFC批準(zhǔn),會有更多的實現(xiàn)雨后春筍般的涌現(xiàn)出來。

在2015年1月下旬,默認(rèn)啟用HTTP/2的Firefox 35發(fā)布后,Google也宣布Chrome 40對2%的用戶啟用了該功能。雖然他沒有告訴我們具體的數(shù)字,但HTTP/2已經(jīng)差不多占到了他們?nèi)蛄髁康?%。與此同時,F(xiàn)irefox 35記錄到了9%的相應(yīng)都是HTTP/2。

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號