HTTP 協(xié)議是怎么來的?最開始是什么樣子?又是如何一步步發(fā)展 HTTP3
HTTP 協(xié)議在我們身邊隨處可見,只要上網(wǎng)就離不開它。不論是用瀏覽器還是 App,不論是看新聞、短視頻還是聽音樂、玩游戲,后面總會有 HTTP 在默默為你服務(wù)。
Http 協(xié)議是怎么來的?最開始是什么樣子?又是如何一步步發(fā)展到今天,幾乎統(tǒng)治了整個互聯(lián)網(wǎng)世界
一起走向 HTTP 的世界,看歷史長河中他是如何應(yīng)運而生,如何適應(yīng)當(dāng)今的互聯(lián)網(wǎng),它又有什么局限性。
史前時期
20 世紀(jì) 60 年代,美國國防部高等研究計劃署(ARPA)建立了 ARPA 網(wǎng),它有四個分布在各地的節(jié)點,被認(rèn)為是如今互聯(lián)網(wǎng)的 “始祖”。
在 70 年代,基于對 ARPA網(wǎng)的實踐和思考,研究人員發(fā)明出了著名的 TCP/IP 協(xié)議。由于具有良好的分層結(jié)構(gòu)和穩(wěn)定的性能,TCP/IP 協(xié)議迅速戰(zhàn)勝其他競爭對手流行起來,并在 80 年代中期進(jìn)入了 UNIX系統(tǒng)內(nèi)核,促使更多的計算機接入了互聯(lián)網(wǎng)。
創(chuàng)世紀(jì)
1989 年,任職于歐洲核子研究中心(CERN)的蒂姆·伯納斯 - 李(Tim Berners-Lee)發(fā)表了一篇論文,提出了在互聯(lián)網(wǎng)上構(gòu)建超鏈接文檔系統(tǒng)的構(gòu)想。這篇論文中他確立了三項關(guān)鍵技術(shù)。
- URI: 統(tǒng)一資源標(biāo)識符,作為互聯(lián)網(wǎng)資源的唯有身份。
- HTML: 超文本標(biāo)記語言,描述超文本文檔。
- HTTP :超文本傳輸協(xié)議,傳輸超文本數(shù)據(jù)。
基于它們,就可以把超文本系統(tǒng)完美地運行在互聯(lián)網(wǎng)上,讓各地的人們能夠自由地共享信息,蒂姆把這個系統(tǒng)稱為“萬維網(wǎng)”(World Wide Web),也就是我們現(xiàn)在所熟知的 Web。
所以在這一年,我們的英雄“HTTP”誕生了,從此開始了它偉大的征途。
HTTP / 0.9
20 世紀(jì) 90 年代初期的互聯(lián)網(wǎng)世界非常簡陋,計算機處理能力低,存儲容量小,網(wǎng)速很慢,還是一片“信息荒漠”。
這一時期的 HTTP 被定義為 0.9 版,結(jié)構(gòu)簡單,便于服務(wù)器與客戶端處理,它也采用了純文本格式。蒂姆·伯納斯 - 李最初設(shè)想的系統(tǒng)里的文檔都是只讀的,所以只允許用“GET”動作從服務(wù)器上獲取 HTML 文檔,并且在響應(yīng)請求之后立即關(guān)閉連接,功能非常有限。
HTTP / 1.0
1993 年,NCSA(美國國家超級計算應(yīng)用中心)開發(fā)出了 Mosaic,是第一個可以圖文混排的瀏覽器,隨后又在 1995年開發(fā)出了服務(wù)器軟件 Apache,簡化了 HTTP服務(wù)器的搭建工作。
同期,計算機多媒體技術(shù)也有了新的進(jìn)展:1992 年發(fā)明了 JPEG圖像格式,1995 年發(fā)明了 MP3音樂格式。
HTTP/1.0 版本在 1996 年正式發(fā)布。它在多方面增強了 0.9 版,形式上已經(jīng)和我們現(xiàn)在的 HTTP 差別不大了。
- 增加了 HEAD POST 等方法。
- 增加了響應(yīng)狀態(tài)碼,標(biāo)識可能的錯誤信息。
- 傳輸?shù)臄?shù)據(jù)不再僅限于文本。
- 引入了 HTTP Header (頭部)的概念。
- 映入了協(xié)議版本號概念。
但 HTTP/1.0 并不是一個“標(biāo)準(zhǔn)”,只是記錄已有實踐和模式的一份參考文檔,不具有實際的約束力,相當(dāng)于一個“備忘錄”。
HTTP / 1.1
1995 年,網(wǎng)景的 Netscape Navigator 和微軟的 Internet Explorer 開始了著名的“瀏覽器大戰(zhàn)”,都希望在互聯(lián)網(wǎng)上占據(jù)主導(dǎo)地位。
最終微軟的 IE 取得了決定性的勝利,而網(wǎng)景則“敗走麥城”。
瀏覽器大戰(zhàn)”的是非成敗我們放在一邊暫且不管,不可否認(rèn)的是,它再一次極大地推動了 Web 的發(fā)展,HTTP/1.0 也在這個過程中經(jīng)受了實踐檢驗。于是在“瀏覽器大戰(zhàn)”結(jié)束之后的 1999 年,HTTP/1.1發(fā)布了 RFC 文檔,編號為 2616,正式確立了延續(xù)十余年的傳奇。
HTTP/1.1 是對 HTTP/1.0 的小幅度修正。但一個重要的區(qū)別是:它是一個“正式的標(biāo)準(zhǔn)”,而不是一份可有可無的“參考文檔”。這意味著今后互聯(lián)網(wǎng)上所有的瀏覽器、服務(wù)器、網(wǎng)關(guān)、代理等等,只要用到 HTTP 協(xié)議,就必須嚴(yán)格遵守這個標(biāo)準(zhǔn),相當(dāng)于是互聯(lián)網(wǎng)世界的一個“立法”。
實際上并不是 “小幅修正” 這么簡單,有很多實質(zhì)上的進(jìn)步,比起 0.9/1.0 少了“學(xué)術(shù)氣”,更加“接地氣”,同時表述也更加嚴(yán)謹(jǐn)。HTTP/1.1 主要的變更點有:
- 增加了 PUT DELETE 等方法。
- 明確了連接管理,支持持久連接。
- 強制要求 Host 頭,王互聯(lián)網(wǎng)主機托管稱為可能。
- 增加了緩存管理和控制。
- 允許響應(yīng)數(shù)據(jù)分塊傳輸 (chunked) ,利于傳輸大文件。
HTTP/1.1 的推出可謂是“眾望所歸”,開啟了后續(xù)的 “Web 1.0” “Web 2.0” 時代?,F(xiàn)在許多的知名網(wǎng)站都是在這個時間點左右創(chuàng)立的,例如 Google、新浪、搜狐、網(wǎng)易、騰訊等。
HTTP / 2
經(jīng)過 HTTP /1.1,整個互聯(lián)網(wǎng)出現(xiàn)了爆炸式增長,這期間也出現(xiàn)了對 HTTp 不滿的意見,主要集中在連接慢,更不上迅猛發(fā)展的互聯(lián)網(wǎng),但 HTTP/1.1 標(biāo)準(zhǔn)一直“巋然不動”,無奈之下人們只好發(fā)明各式各樣的“小花招”來緩解這些問題,比如以前常見的切圖、JS 合并等網(wǎng)頁優(yōu)化手段。
終于有一天,搜索巨頭 Google 忍不住了,決定“揭竿而起”,就像馬云說的“如果銀行不改變,我們就改變銀行”。那么,它是怎么“造反”的呢?
Google 首先開發(fā)了自己的瀏覽器 Chrome,然后推出了新的 SPDY 協(xié)議,并在 Chrome 里應(yīng)用于自家的服務(wù)器,如同十多年前的網(wǎng)景與微軟一樣,從實際的用戶方來“倒逼”HTTP 協(xié)議的變革,這也開啟了第二次的“瀏覽器大戰(zhàn)”。
歷史再次重演,不過這次的勝利者是 Google,Chrome 目前的全球的占有率超過了 60%。“挾用戶以號令天下”,Google 借此順勢把 SPDY 推上了標(biāo)準(zhǔn)的寶座,互聯(lián)網(wǎng)標(biāo)準(zhǔn)化組織以 SPDY 為基礎(chǔ)開始制定新版本的 HTTP 協(xié)議,最終在 2015 年發(fā)布了 HTTP/2,RFC 編號 7540。
這次協(xié)議的制定充分考慮了如今互聯(lián)網(wǎng)的現(xiàn)狀:寬帶、移動、不安全在高度兼容 HTTP/1.1 的同時在性能改善方面做了很大努力,主要的特點有:
- 可發(fā)起多個請求,廢棄了 HTTP/1.1 的管道。
- 增強了安全性,要求加密通信。
- 允許服務(wù)器主動向客戶端推送數(shù)據(jù)。
- 二進(jìn)制協(xié)議,不再是純文本。
- 使用專用的壓縮算法壓縮頭部,減少傳輸數(shù)據(jù)量。
雖然 HTTP/2 到今天已經(jīng)四歲,也衍生出了 gRPC等新協(xié)議,但由于 HTTP/1.1 實在是太過經(jīng)典和強勢,目前它的普及率還比較低,大多數(shù)網(wǎng)站使用的仍然還是 20 年前的 HTTP/1.1。
HTTP/3
這時候谷歌開始 革自己的命。在 HTTP/2 還處于草案之時,Google 又發(fā)明了一個新的協(xié)議,叫做 QUIC,而且還是相同的“套路”,繼續(xù)在 Chrome和自家服務(wù)器里試驗著 “玩”,依托它的龐大用戶量和數(shù)據(jù)量,持續(xù)地推動 QUIC協(xié)議成為互聯(lián)網(wǎng)上的“既成事實”。
2018 年,互聯(lián)網(wǎng)標(biāo)準(zhǔn)化組織 IETF提議將“HTTP over QUIC”更名為“HTTP/3”并獲得批準(zhǔn),HTTP/3 正式進(jìn)入了標(biāo)準(zhǔn)化制訂階段,也許兩三年后就會正式發(fā)布,到時候我們很可能會跳過 HTTP/2直接進(jìn)入 HTTP/3。
老鐵們期待么?
回顧
開篇回顧了 HTTP 協(xié)議的整個發(fā)展過程,總結(jié)下主要如下幾點:
- HTTP 協(xié)議始于三十年前蒂姆·伯納斯 - 李的一篇論文;
- HTTP/0.9 是個簡單的文本協(xié)議,只能獲取文本資源;
- HTTP/1.0 確立了大部分現(xiàn)在使用的技術(shù),但它不是正式標(biāo)準(zhǔn);
- HTTP/1.1 是目前互聯(lián)網(wǎng)上使用最廣泛的協(xié)議,功能也非常完善;
- HTTP/2 基于 Google 的 SPDY 協(xié)議,注重性能改善,但還未普及;
- HTTP/3 基于 Google 的 QUIC 協(xié)議,是將來的發(fā)展方向。