HTTP 發展的前世今生

網絡優化系列專題,聊一聊面對復雜多變的移動網絡,我們需要掌握哪些網絡基礎知識,以及該如何做好網絡優化這項工作。


網絡優化系列專題
  • 網絡優化背景知識(待完善)

關于 5G,你應該知道的發展史
HTTP 發展的前世今生
網絡安全 — HTTPS
關于網絡優化,你需要了解什么?
HTTP 的第一次變革 — HTTP/2
《展望更好 — HTTP/3》

  • 如何優化網絡性能(待更)

    ...


如今,打開手機或電腦,只要你上網,不論是選擇哪個操作系統,不論是用瀏覽器還是 App,不論是看新聞、短視頻還是聽音樂...,總會有 HTTP 在后臺默默為你服務。

在享受如此便捷舒適的網絡生活時,你是否有想過,HTTP 協議是怎么來的?它最開始是什么樣子的?又是如何發展到今天,幾乎“統治”整個互聯網世界的呢?

今天我們就來聊一聊 HTTP 的發展歷程,了解下它的成長軌跡。


誕生

1989 年 3 月 12 日,任職于 CERN(歐洲核子研究中心)的 Tim Berners-Lee(蒂姆.伯納斯 - 李)提交了一篇名為《Information Management : a proposal》(關于信息化管理的建議)文章,提出了在互聯網上構建超鏈接文檔系統的構想,初步闡述了后來被稱為 World Wide Web(萬維網) 的信息管理概念,該篇文章中他確立了三項關鍵技術:

  1. URI(Uniform Resource Identifier):即統一資源標識符,作為互聯網上資源的唯一身份;

  2. HTML(Hypertext Markup Language):超文本標記語言,描述超文本文檔;

  3. HTTP(Hypertext Transfer Protocol):即超文本傳輸協議,用來傳輸超文本。

基于它們,就可以把超文本系統完美地運行在互聯網上,讓各地的人們能夠自由地共享信息,這也是我們現在所熟知的 Web。

所以在這一年,HTTP 誕生了,從此開始了它的光輝之路。由于該篇文章,1989 年也被認為是蒂姆.博納斯 - 李發明 World Wide Web 的年份。


HTTP/0.9

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

這一時期的 HTTP 被定為 0.9 版本,結構比較簡單,為了便于服務器和客戶端處理,它也采用純文本格式。蒂姆.博納斯 - 李最初設想系統里的文檔都是只讀的,所以只允許用 “GET” 操作從服務器上獲取 HTML 文檔,并且在響應請求之后立即關閉連接,功能非常有限。

HTTP/0.9 雖然很簡單,但它作為一個“原型”,充分驗證了 Web 服務的可行性,而“簡單”也正式它的優點,因為這蘊含了后來進化和擴展的可能性:把簡單的系統變復雜,要比把復雜的系統變簡單容易得多

第一個網站

1990 年 12 月 20 日,蒂姆.博納斯 - 李架設了人類歷史上第一個網站,域名為 Info.cern.ch,它被用于 CERN 內部;所使用的服務器則是他的個人 NeXT 電腦,直到今天,這臺 NeXT 電腦依然被作為人類首個網站的服務器,當然這個網站也被 CERN 保留了下來。

1991 年 8 月 6 日,蒂姆.博納斯 - 李又將與 World Wide Web 項目相關的總結文檔上傳至互聯網,這是第一個出現在互聯網上的 Web 網站,距離現在已經整整 28 周年了。


HTTP / 1.0

但是在當時,World Wide Web 并沒有迅速獲得世人的認可。盡管博納斯·李堅信自己的發明將會“統治世界”,但是到了 1992 年,他的論文還是被“超文本會議”拒絕了。

而這時,正在美國伊利諾大學 NCSA(美國國家超級計算應用中心) 學習(兼職)的馬克.安德森出現了,年僅 22 歲的他已經對互聯網頗為熟悉了;他覺得在 World Wide Web 加上圖形更有意思,就與人合作開發出第一個可以圖文混排的瀏覽器 Mosaic。該瀏覽器一經發布就受到了熱烈歡迎。但由于 Mosaic 是由大學的資金和設備開發的,所以它的所有權歸 NCSA 所有。

注意,Mosaic 并不是第一個圖形接口瀏覽器,比它更早的例如由蒂姆.博納斯 - 李本人開發的 WorldWideWeb(世界上第一個網頁瀏覽器,后更名為 Nexus)、鮮為人知的 Erwise 和 ViolaWWW。但是 Mosaic 卻是第一個可以在文字中嵌入圖片,而不是在單獨窗口中顯示圖片的瀏覽器

同一時期,計算機多媒體技術也有了新的發展,1992 年 JPEG(聯合圖像專家小組) 圖像格式誕生,1995 年發明了 MP3(動態影像專家壓縮標準音頻層面3)音樂格式。

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

于是在這些已有實踐的基礎上,經過一系列的草案,HTTP/1.0 版本在 1996 年正式發布,它在多方面增強了 0.9 版本,形式上已經和我們現在的 HTTP 差別不大了,例如:

  1. 增加了 HEAD、POST 等新方法;
  2. 增加了響應狀態碼,標記可能的錯誤原因;
  3. 引入協議版本號概念;
  4. 引入了 HTTP Header 的概念,讓 HTTP 處理請求和響應更加靈活;
  5. 傳輸數據不在僅限于文本。

但是 HTTP/1.0 并不是一個標準,只是記錄已有實踐和模式的一份參考文檔,不具有實際的約束力,就有點類似于備忘錄。

所以 HTTP 1.0 的發布,對于當時正在蓬勃發展的互聯網來說,并沒有太多的實際意義,各方“勢力”仍然按照自己的意圖繼續在市場上奮力“拼殺”。


HTTP / 1.1

前面我們有提到,第一個圖文混排的瀏覽器 Mosaic 由馬克.安德森與他人合作開發,但是它的所有權歸 NCSA 所有,而 NCSA 最后決定將 Mosaic 交給了 Spyglass (實際是 NCSA 的一個分支,旨在將 NCSA 技術商業化)用于商業用途和運營。

于是,1994 年馬克.安德森離開 NCSA,與人合作創辦了 Netscape,也就是網景公司(最初叫做 Mosaic 公司,為了規避與 NCSA 的法律糾葛,同年 11 月公司最終變更為 Netscape),專門用來開發用于商業運作的圖形瀏覽器,公司的產品也更名為網景瀏覽器。同年 12 月 15 日網景瀏覽器 1.0 正式發布,軟件改名為 NetScape Navigator(網景導航者)。

網景瀏覽器是第一個大獲成功的商業瀏覽器,它將蒂姆.博納斯 - 李發明的 World Wide Web 從實驗室帶到了公眾視野;正如博納斯 - 李預言的那樣,World Wide Web 開始了“統治世界”的進程。

隨著網景公司的日益強大,公司開始嘗試創做一種能夠讓用戶通過瀏覽器操作的網絡應用系統。這讓微軟感受到了威脅,擔心網景可能威脅到微軟的操作系統和應用程序市場。于是微軟于 1995 年研發了自己的 Internet Explorer,這一年開始了著名的瀏覽器大戰,網景的 NetScape Navigator 和微軟的 Internet Explorer 都希望在互聯網上占據主導地位。

雖然這場“戰爭”的結果你一定早就知道了,最終微軟的 IE 取得了決定性的勝利,而網景則“敗走麥城”(最后憑借 Mozilla Firefox 又扳回一局)。

具有諷刺意味的是,Internet Explorer 正是在馬克.安德森開發的 Mosaic 的基礎上發展而來的。當然,微軟獲得了伊利諾大學的許可。

不可否認,“瀏覽器大戰”再一次極大地推動了 Web 的發展,HTTP/1.0 也在這個過程中經受了實踐的檢驗。于是在 “大戰” 結束之后的 1999 年,HTTP/1.1 發布了 RFC(Request for Comments)文檔,編號為 2616,正式確立了延續十余年的傳奇。

從版本號我們就可以看出,HTTP/1.1 是對 HTTP/1.0 的小幅度修正。但一個重要的區別是:它是一個正式的標準,而不是一份可有可無的參考文檔。這意味著今后互聯網上所有的瀏覽器、服務器、網關和代理等等,只要用到 HTTP 協議,就必須嚴格遵守這個標準,相當于是互聯網世界的一個“立法”。

不過,說 HTTP/1.1 是小幅度“修正”也不太確切,它還是有很多實質性進步的。畢竟經過了多年的實戰檢驗,比起 0.9 和 1.0 更加接近用戶, 同時表述也更加嚴謹。HTTP/1.1 主要的變更有以下:

  1. 增加了 PUT、DELETE 等新方法;
  2. 增加了緩存管理和控制;
  3. 明確了連接管理,允許持久連接;
  4. 允許響應數據分塊(chunked),利于傳輸大文件;
  5. 強制要求 Host 頭,讓互聯網主機通關成為可能。

由此,互聯網在它的“保駕護航”下邁開了新的步伐,開啟了后續的 Web 1.0,Web 2.0 時代。現在許多知名企業都是在這個時間點左右創立的,例如 Google、新浪、搜狐、網易、騰訊等。

  • 不過由于 HTTP/1.1 太過龐大和復雜,所以在 2014 年又做了一次修訂,原來一個大文檔被拆分成了六份較小的文檔,編號為 7230 ~ 7235,優化了一些細節,但此外沒有任何實質性的改動。

Google 開始領航

HTTP/1.1 發布之后,整個互聯網世界呈現出了爆發式的增長,度過了十多年的“快樂時光”,更涌現了 Facebook、Twitter、淘寶和京東等互聯網新貴。

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

HTTP/2.0

終于有一天,搜索巨頭 Google 忍不住了,決定“揭竿起義”,那么它是怎么開始“造反”的呢?

Google 首先開發了自己的 Chrome 瀏覽器,然后推出了新的 SPDY 協議,并在 Chrome 里應用于自家的服務器,如同十多年前的網景和微軟一樣,從實際的用戶來“倒逼” HTTP 協議的變革,這也開啟了第二次“瀏覽器大戰”。

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

  • SPDY 并不是首字母縮略字,僅僅是 speedy 的縮寫。Google 最早是在 Chromium 中提出 SPDY 協議,HTTP/2 的關鍵功能主要來自 SPDY 技術,換言之,SPDY 的成果被采納而最終演變為 HTTP/2。SPDY 協議通過壓縮、多路復用和優先級來縮短加載時間。

HTTP/2 的制定充分考慮了互聯網的現狀:帶寬、移動和不安全,在高度兼容 HTTP/1.1 的同時更注重性能方面的改進,主要的特點有:

  1. 二進制協議,不再是純文本;
  2. 可發起多個請求(多路復用),廢棄了 1.1 里的通道;
  3. 使用專用算法壓縮頭部,減少數據傳輸量;
  4. 允許服務器主動向客戶端推送數據;
  5. 增強了安全性,要求加密通信。

連接復用

網絡連接這個環節需要經過 TCP 三次握手、TLS 秘鑰協商,連接建立的代價是非常大的,這里優化思路是復用連接,這樣不用每次請求都重新建立連接。這里我們利用的是 HTTP 協議里的 keep-alive。而 HTTP/2.0 的多路復用則可以進一步的提升連接復用率。它復用的這條連接支持同時處理多條請求,所有請求都可以并發在這條連接上進行。


HTTP/3

HTTP/2 這么好,是不是已經完美了呢?答案是否定的,H2 的多路復用在本質上依然是同一條 TCP 連接,如果所有域名的請求都集中在某一條連接上,在網絡擁塞的時候容易出現 TCP 隊首阻塞的問題。

這一次還是 Google,而且它要“革自己的命”。在 HTTP/2 還處于草案之時,Google 又發明了一個新的協議 — QUIC(Quick UDP Internet Connection),而且還是相同的“套路”,繼續在 Chrome 和自家服務器里“試驗著玩”,依托它的龐大用戶量和數據量,持續地推動 QUIC 協議成為互聯網上的“既成事實”。

在連接復用中我們說過 HTTP/2 + TCP 會存在隊首阻塞的問題,基于 UDP 的 QUIC 才是終極解決方案。 QUIC 也確實因為自身素質過硬,在 2018 年,互聯網標準化組織 IETF 提議將 “HTTP over QUIC” 更名為 HTTP/3 并獲得成功,HTTP/3 正式進入了標準化制定階段,也許幾年以后就會正式發布,到時候我們說不定可以直接跳過 HTTP/2 直接進入 HTTP/3。

如下圖所示,可以把 QUIC 簡單理解為 HTTP/2.0 + TLS 1.3 + UDP。

目前 QUIC 還有很多坑還沒有踩完,發現的主要問題例如有創建連接成功率和運營商劫持等。


小結

2019 年 3 月 12 日,是 World Wide Web 誕生 30 周年的紀念日,當然也是 HTTP 協議的整個發展過程,這里再簡單總結下:

1. HTTP 協議始于三十年前蒂姆.博納斯 - 李的一篇論文
2. HTTP/0.9 是個簡單的文本協議,只能獲取文本資源
3. HTTP/1.0 確立了大部分現在使用的技術,但它不是正式標準
4. HTTP/1.1 是目前互聯網上使用最廣泛的協議,功能也非常完善
5. HTTP/2.0 基于 Google 的 SPDY 協議,注重性能改善,改善的目標是低延遲,但其普及率并不高
6. HTTP/3 基于 Google 的 QUIC 協議,目前正在制定中,將是未來發展的方向

最后

通過今天的介紹,相信你對 HTTP 有了一個初步但清晰的認識。另外大家對 HTTP 的發展還有哪些理解和認識?歡迎大家留言分享或指正。

文章如果對你有幫助,請留個贊吧。


彩蛋

  1. 早期的 HTTP/0.9 是沒有版本號的,0.9 這個版本號是后來才加上去的,用于區別之后的 1.0/1.1;

  2. HTTP/1.0 的 RFC 編號是 1945,而 HTTP/0.9 則沒有 RFC;

  3. 一個有趣的事實:“World Wide Web” 是英語中極少數縮寫(WWW)比原文發音更長的詞。


擴展閱讀

UI 優化系列

存儲優化系列

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內容