帶你5分鐘看懂HTTP/3
什么是 HTTP3?本文以一種深入淺出的方式,讓你快速了解 HTTP3。
你連 HTTP2 都還沒(méi)搞明白,就有人開(kāi)始談 HTTP3 了,真讓人火大。但 HTTP3 會(huì)受到關(guān)注也是有理由的:它速度很快。
1.很久以前
談未來(lái)之前,咱們先講講現(xiàn)實(shí)。
你了解 HTTP 嗎?這個(gè)定義于 1991 年的協(xié)議是用來(lái)管理 Web 的。它的全名是超文本傳輸協(xié)議,讓你可以從網(wǎng)頁(yè)中獲取資源,網(wǎng)頁(yè)數(shù)據(jù)從 Web 服務(wù)器傳輸?shù)侥愕臑g覽器上。它基于較低級(jí)別的協(xié)議——TCP,這里是重點(diǎn)——而且它是無(wú)狀態(tài)的。這意味著每個(gè)請(qǐng)求都是完全獨(dú)立的。頁(yè)面上顯示的每個(gè) GIF 圖片都在互聯(lián)網(wǎng)上獨(dú)立存在,這對(duì)這些 GIF 圖片本身來(lái)說(shuō)是好事。但對(duì)我們來(lái)說(shuō),這樣的一個(gè)系統(tǒng)是有些支離破碎的。
問(wèn)題在于每個(gè)請(qǐng)求一次只會(huì)查找一個(gè)文件。每次都要?jiǎng)?chuàng)建一個(gè)昂貴的 TCP 連接。想象一下,如果你的頁(yè)面上有 10,000 個(gè)小技巧,這會(huì)是多么沉重的負(fù)擔(dān)啊。
我知道有很多人喜歡我上一篇文章中制作的圖片,所以為了更好地向大家解釋互聯(lián)網(wǎng)的協(xié)議機(jī)制,這里我會(huì)再做一張圖。
盡管瀏覽器可以同時(shí)發(fā)出六個(gè)不同的請(qǐng)求,但是 HTTP 仍然很慢,并且需要很多 TCP 連接。另外,我們開(kāi)發(fā)人員通常不會(huì)在意這一點(diǎn)。我們喜歡在頁(yè)面上塞滿各種垃圾。比如說(shuō)巨大的 jQuery 庫(kù),包含 300 個(gè)無(wú)用的 CSS 樣式表,結(jié)尾是一個(gè)透明的 8 兆大 PNG 圖。
當(dāng)谷歌發(fā)現(xiàn)我們?cè)诨ヂ?lián)網(wǎng)上到處傾倒垃圾后,他們就開(kāi)始搞一個(gè)稱為 SPDY 的東西了。目的是什么呢?當(dāng)然是加快互聯(lián)網(wǎng)的速度。
SPDY 是一個(gè)規(guī)范,建議繼續(xù)使用 HTTP,但要更改一些規(guī)則。通過(guò)壓縮標(biāo)頭、對(duì)請(qǐng)求進(jìn)行優(yōu)先級(jí)排序和多路復(fù)用,它將把所有 TCP 請(qǐng)求和連接變成單獨(dú)的一個(gè)!
具體來(lái)說(shuō),當(dāng)你讀取 HTML 時(shí),瀏覽器會(huì)查看你在頁(yè)面中要詢問(wèn)的所有內(nèi)容。然后,它可以一次獲取所有內(nèi)容,這樣就可以避免一個(gè)文件一個(gè)文件地獲取了。
HTTP2 的第一份草案基于 SPDY。HTTP2 很快被廣泛采用,隨后互聯(lián)網(wǎng)上的一切變得快多了。今天,互聯(lián)網(wǎng)上 42.7%的內(nèi)容使用 HTTP2。
2. 關(guān)于 HTTP3
HTTP2 是以 HTTP 為基礎(chǔ)并改動(dòng)一些規(guī)則的產(chǎn)物。HTTP3 也是如此。換句話說(shuō),解釋清楚現(xiàn)狀后,我就可以很容易地講明白未來(lái)是什么樣子的。
谷歌是一個(gè)極客組織,他們永遠(yuǎn)不會(huì)停止腳步。SPDY 演變成為 HTTP2 后,他們認(rèn)為它仍然不夠快。因此,他們開(kāi)始討論 QUIC 這個(gè)項(xiàng)目。這是谷歌開(kāi)發(fā)的第二項(xiàng)將成為 HTTP 協(xié)議的正式升級(jí)的技術(shù)。那么,這個(gè)協(xié)議有什么特別之處?
HTTP3 的主要改進(jìn)在傳輸層上。傳輸層不會(huì)再有我前面提到的那些繁重的 TCP 連接了。現(xiàn)在,一切都會(huì)走 UDP。
順便說(shuō)一下,QUIC 的意思是“快速 UDP Internet 連接”。協(xié)議的這種更改將顯著加快連接建立和數(shù)據(jù)傳輸?shù)乃俣取H欢m說(shuō) UDP 肯定更快、更簡(jiǎn)單,但它不具備 TCP 的可靠性和錯(cuò)誤處理能力。
TCP 必須進(jìn)行多次往返,才能以方形且穩(wěn)定的方式建立連接。UDP 不會(huì)顧慮那么多,而且它確實(shí)可以快速運(yùn)行,代價(jià)是穩(wěn)定性下降和丟包的風(fēng)險(xiǎn)。但是,UDP 能大大減少請(qǐng)求中的延遲。到同一服務(wù)器的重復(fù)連接的延遲幾乎為零,因?yàn)椴恍枰祦?lái)建立連接。
HTTP3 是 HTTP2 的復(fù)用和壓縮,協(xié)議從 TCP 更改為 UDP。然后,谷歌的那些人在協(xié)議中添加了他們做的層,以確保穩(wěn)定性、數(shù)據(jù)包接收順序及安全性。
因此,HTTP3 在保持 QUIC 穩(wěn)定性的同時(shí)使用 UDP 來(lái)實(shí)現(xiàn)高速度,同時(shí)又不會(huì)犧牲 TLS 的安全性。是的,在 QUIC 中就有 TLS1.3,你可以用它發(fā)起優(yōu)雅的 SSL。這些層的底層機(jī)制是下面這樣:
2018 年,QUIC 演變成為 HTTP3。互聯(lián)網(wǎng)工程任務(wù)組(Internet Engineerring Task Force)的那幫制定互聯(lián)網(wǎng)協(xié)議的哥們同意了這個(gè)提案。這是個(gè)好消息,因?yàn)閷?duì)于我們這些急躁的人們來(lái)說(shuō),互聯(lián)網(wǎng)的速度永遠(yuǎn)都不夠快。
3.結(jié)語(yǔ)
HTTP3 代表著充滿魅力的未來(lái),它的 HTTP基礎(chǔ)潛能已經(jīng)被谷歌的那些極客發(fā)揮到極致。在撰寫(xiě)本文時(shí),只有 4.6%的互聯(lián)網(wǎng)內(nèi)容在使用 HTTP3,但這個(gè)數(shù)字在未來(lái)幾年中可能會(huì)增長(zhǎng)許多。本文只是簡(jiǎn)單談了談這方面的知識(shí),但如果你想了解更多,網(wǎng)上有很多的文章可供你參考。