時勢與英雄:HTTP的前世此生

正式資料「少」、網上資料「雜」、權威資料「難」。

HTTP 協議在咱們的生活中隨處可見,打開手機或者電腦,只要你上網,不管是用 iPhone、Android、Windows 仍是 Mac,不管是用瀏覽器仍是 App,不管是看新聞、短視頻仍是聽音樂、玩遊戲,後面總會有 HTTP 在默默爲你服務。算法

據 NetCraft 公司統計,目前全球至少有 16 億個網站、2 億多個獨立域名,而這個龐大網絡世界的底層運起色制就是 HTTP。瀏覽器

那麼,在享受如此便捷溫馨的網絡生活時,你有沒有想過,HTTP 協議是怎麼來的?它最開始是什麼樣子的?又是如何一步一步發展到今天,幾乎「統治」了整個互聯網世界的呢?緩存

常言道:「時勢造英雄,英雄亦造時勢」安全

今天我就和你來聊一聊 HTTP 的發展歷程,看看它的成長軌跡,看看歷史上有哪些事件推進了它的前進,它又促進了哪些技術的產生,一塊兒來見證「英雄之旅」。服務器

在這個過程當中,你也可以順便了解一下 HTTP 的「歷史侷限性」,明白 HTTP 爲何會設計成如今這個樣子。網絡

史前時期

20 世紀 60 年代,美國國防部高等研究計劃署(ARPA)創建了 ARPA 網,它有四個分佈在各地的節點,被認爲是現在互聯網的「始祖」。ide

而後在 70 年代,基於對 ARPA 網的實踐和思考,研究人員發明出了著名的 TCP/IP 協議。因爲具備良好的分層結構和穩定的性能,TCP/IP 協議迅速打敗其餘競爭對手流行起來,並在 80 年代中期進入了 UNIX 系統內核,促使更多的計算機接入了互聯網。性能

創世紀

蒂姆·伯納斯 - 李
1989 年,任職於歐洲核子研究中心(CERN)的蒂姆·伯納斯 - 李(Tim Berners-Lee)發表了一篇論文,提出了在互聯網上構建超連接文檔系統的構想。這篇論文中他確立了三項關鍵技術。

  • URI:即統一資源標識符,做爲互聯網上資源的惟一身份;
  • HTML:即超文本標記語言,描述超文本文檔;
  • HTTP:即超文本傳輸協議,用來傳輸超文本。

這三項技術在現在的咱們看來已是稀鬆日常,但在當時倒是了不起的大發明。基於它們,就能夠把超文本系統完美地運行在互聯網上,讓各地的人們可以自由地共享信息,蒂姆把這個系統稱爲「萬維網」(World Wide Web),也就是咱們如今所熟知的 Web。優化

因此在這一年,咱們的英雄「HTTP」誕生了,今後開始了它偉大的征途。網站

HTTP/0.9

20 世紀 90 年代初期的互聯網世界很是簡陋,計算機處理能力低,存儲容量小,網速很慢,仍是一片「信息荒漠」。網絡上絕大多數的資源都是純文本,不少通訊協議也都使用純文本,因此 HTTP 的設計也不可避免地受到了時代的限制。

這一時期的 HTTP 被定義爲 0.9 版,結構比較簡單,爲了便於服務器和客戶端處理,它也採用了純文本格式。蒂姆·伯納斯 - 李最初設想的系統裏的文檔都是隻讀的,因此只容許用「GET」動做從服務器上獲取 HTML 文檔,而且在響應請求以後當即關閉鏈接,功能很是有限。

HTTP/0.9 雖然很簡單,但它做爲一個「原型」,充分驗證了 Web 服務的可行性,而「簡單」也正是它的優勢,蘊含了進化和擴展的可能性,由於:

「把簡單的系統變複雜」,要比「把複雜的系統變簡單」容易得多。

HTTP/1.0

1993 年,NCSA(美國國家超級計算應用中心)開發出了 Mosaic,是第一個能夠圖文混排的瀏覽器,隨後又在 1995 年開發出了服務器軟件 Apache,簡化了 HTTP 服務器的搭建工做。

同一時期,計算機多媒體技術也有了新的發展:1992 年發明了 JPEG 圖像格式,1995 年發明了 MP3 音樂格式。

這些新軟件新技術一經推出馬上就吸引了廣大網民的熱情,更的多的人開始使用互聯網,研究 HTTP 並提出改進意見,甚至實驗性地往協議裏添加各類特性,從用戶需求的角度促進了 HTTP 的發展。

因而在這些已有實踐的基礎上,通過一系列的草案,HTTP/1.0 版本在 1996 年正式發佈。它在多方面加強了 0.9 版,形式上已經和咱們如今的 HTTP 差異不大了,例如:

  • 增長了 HEAD、POST 等新方法;
  • 增長了響應狀態碼,標記可能的錯誤緣由;
  • 引入了協議版本號概念;
  • 引入了 HTTP Header(頭部)的概念,讓 HTTP 處理請求和響應更加靈活;
  • 傳輸的數據再也不僅限於文本。

但 HTTP/1.0 並非一個「標準」,只是記錄已有實踐和模式的一份參考文檔,不具備實際的約束力,至關於一個「備忘錄」。

因此 HTTP/1.0 的發佈對於當時正在蓬勃發展的互聯網來講並無太大的實際意義,各方勢力仍然按照本身的意圖繼續在市場上奮力拼殺。

HTTP/1.1

1995 年,網景的 Netscape Navigator 和微軟的 Internet Explorer 開始了著名的「瀏覽器大戰」,都但願在互聯網上佔據主導地位。

這場戰爭的結果你必定早就知道了,最終微軟的 IE 取得了決定性的勝利,而網景則「敗走麥城」(但後來卻憑藉 Mozilla Firefox 又扳回一局)。

「瀏覽器大戰」的是非成敗咱們放在一邊暫且無論,不能否認的是,它再一次極大地推進了 Web 的發展,HTTP/1.0 也在這個過程當中經受了實踐檢驗。因而在「瀏覽器大戰」結束以後的 1999 年,HTTP/1.1 發佈了 RFC 文檔,編號爲 2616,正式確立了延續十餘年的傳奇。

從版本號咱們就能夠看到,HTTP/1.1 是對 HTTP/1.0 的小幅度修正。但一個重要的區別是:它是一個「正式的標準」,而不是一份無關緊要的「參考文檔」。這意味着從此互聯網上全部的瀏覽器、服務器、網關、代理等等,只要用到 HTTP 協議,就必須嚴格遵照這個標準,至關因而互聯網世界的一個「立法」。

不過,說 HTTP/1.1 是「小幅度修正」也不太確切,它仍是有不少實質性進步的。畢竟通過了多年的實戰檢驗,比起 0.9/1.0 少了「學術氣」,更加「接地氣」,同時表述也更加嚴謹。HTTP/1.1 主要的變動點有:

  • 增長了 PUT、DELETE 等新的方法;
  • 增長了緩存管理和控制;
  • 明確了鏈接管理,容許持久鏈接;
  • 容許響應數據分塊(chunked),利於傳輸大文件;
  • 強制要求 Host 頭,讓互聯網主機託管成爲可能。

HTTP/1.1 的推出可謂是「衆望所歸」,互聯網在它的「保駕護航」下邁開了大步,由此走上了「康莊大道」,開啓了後續的「Web 1.0」「Web 2.0」時代。如今許多的知名網站都是在這個時間點左右創立的,例如 Google、新浪、搜狐、網易、騰訊等。

不過因爲 HTTP/1.1 太過龐大和複雜,因此在 2014 年又作了一次修訂,原來的一個大文檔被拆分紅了六份較小的文檔,編號爲 7230-7235,優化了一些細節,但此外沒有任何實質性的改動。

HTTP/2

HTTP/1.1 發佈以後,整個互聯網世界呈現出了爆發式的增加,度過了十多年的「快樂時光」,更涌現出了 Facebook、Twitter、淘寶、京東等互聯網新貴。

這期間也出現了一些對 HTTP 不滿的意見,主要就是鏈接慢,沒法跟上迅猛發展的互聯網,但 HTTP/1.1 標準一直「巋然不動」,無奈之下人們只好發明各式各樣的「小花招」來緩解這些問題,好比之前常見的切圖、JS 合併等網頁優化手段。

終於有一天,搜索巨頭 Google 忍不住了,決定「揭竿而起」,就像馬雲說的「若是銀行不改變,咱們就改變銀行」。那麼,它是怎麼「造反」的呢?

Google 首先開發了本身的瀏覽器 Chrome,而後推出了新的 SPDY 協議,並在 Chrome 裏應用於自家的服務器,如同十多年前的網景與微軟同樣,從實際的用戶方來「倒逼」HTTP 協議的變革,這也開啓了第二次的「瀏覽器大戰」。

歷史再次重演,不過此次的勝利者是 Google,Chrome 目前的全球的佔有率超過了 60%。「挾用戶以號令天下」,Google 藉此順勢把 SPDY 推上了標準的寶座,互聯網標準化組織以 SPDY 爲基礎開始制定新版本的 HTTP 協議,最終在 2015 年發佈了 HTTP/2,RFC 編號 7540。

HTTP/2 的制定充分考慮了現今互聯網的現狀:寬帶、移動、不安全,在高度兼容 HTTP/1.1 的同時在性能改善方面作了很大努力,主要的特色有:

  • 二進制協議,再也不是純文本;
  • 可發起多個請求,廢棄了 1.1 裏的管道;
  • 使用專用算法壓縮頭部,減小數據傳輸量;
  • 容許服務器主動向客戶端推送數據;
  • 加強了安全性,「事實上」要求加密通訊。

雖然 HTTP/2 到今天已經四歲,也衍生出了 gRPC 等新協議,但因爲 HTTP/1.1 實在是太過經典和強勢,目前它的普及率還比較低,大多數網站使用的仍然仍是 20 年前的 HTTP/1.1。

HTTP/3

看到這裏,你可能會問了:「HTTP/2 這麼好,是否是就已經完美了呢?

」答案是否認的,這一次仍是 Google,並且它要「革本身的命」。

在 HTTP/2 還處於草案之時,Google 又發明了一個新的協議,叫作 QUIC,並且仍是相同的「套路」,繼續在 Chrome 和自家服務器裏試驗着「玩」,依託它的龐大用戶量和數據量,持續地推進 QUIC 協議成爲互聯網上的「既成事實」。

「功夫不負有心人」,固然也是由於 QUIC 確實自身素質過硬。

在去年,也就是 2018 年,互聯網標準化組織 IETF 提議將「HTTP over QUIC」改名爲「HTTP/3」並得到批准,HTTP/3 正式進入了標準化制訂階段,也許兩三年後就會正式發佈,到時候咱們極可能會跳過 HTTP/2 直接進入 HTTP/3。

小結

今天我和你一塊兒跨越了三十年的歷史長河,回顧了 HTTP 協議的整個發展過程,在這裏簡單小結一下今天的內容:

  • HTTP 協議始於三十年前蒂姆·伯納斯 - 李的一篇論文;
  • HTTP/0.9 是個簡單的文本協議,只能獲取文本資源;
  • HTTP/1.0 確立了大部分如今使用的技術,但它不是正式標準;
  • HTTP/1.1 是目前互聯網上使用最普遍的協議,功能也很是完善;
  • HTTP/2 基於 Google 的 SPDY 協議,注重性能改善,但還未普及;
  • HTTP/3 基於 Google 的 QUIC 協議,是未來的發展方向。

但願經過今天的介紹,你可以對 HTTP 有一個初步但清晰的印象,知道了「來龍」才能更好地知道「去脈」。

課下做業

  • 你認爲推進 HTTP 發展的原動力是什麼?
  • 你是怎麼理解 HTTP(超文本傳輸協議)的?
本片文章源於極客時間《透視HTTP協議》
相關文章
相關標籤/搜索