HTTP 協議的前世此生

HTTP 協議全稱是超文本傳輸協議(Hypertext Transfer Protocol),這裏面須要理解三個地方:超文本、傳輸、協議,下面就從 HTTP 協議的歷史講起。html

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

到了 70 年代,基於對 ARPA 網絡的實踐和思考,研究人員發明出了著名的 TCP/IP 協議,並在 80 年代中期進入了 UNIX 內核,使更多計算機接入了互聯網。算法

HTTP 誕生

這位大師叫蒂姆·伯納斯·李(Tim Berners-Lee),是萬維網的創始人,簡單點說,是當代互聯網的創始人。後端

在 1989 年,他發表了一篇論文,提出了在互聯網上構建超連接文檔系統的構想,在這篇論文裏他確立了三項關鍵技術:瀏覽器

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

這三項技術直接奠基了咱們當今 Web 世界的技術,蒂姆把它稱爲萬維網(World Wide Web)。緩存

因此,1989 年,HTTP 誕生了。安全

HTTP/0.9

在 20 世紀 90 年代初,互聯網世界仍是一片荒漠,計算機處理能力低下,存儲容量小,網速很慢。網絡上的絕大多數資源都是純文本資源,因此 HTTP 協議也是純文本格式的。服務器

爲了便於服務器和客戶端處理,蒂姆最初設想的系統裏的文檔都是隻讀的,因此只容許用戶經過 GET 請求從服務器上獲取 HTML 文檔,而且在響應以後當即關閉鏈接,功能很是有限。網絡

這一版 HTTP 協議雖然很簡單,可是做爲一個原型,充分驗證了 Web 服務的可行性。併發

HTTP/1.0

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

同一時期,在 1992 年發明了 JPEG 圖像格式,1995 年發明了 MP3 音樂格式。

這些新技術的出現,促使 HTTP 協議開始添加各類特性,從用戶需求的角度促進了 HTTP 協議的發展。

在已有實踐的基礎上,通過一系列的草案,HTTP/1.0 在 1996 年正式發佈。主要增長了如下幾部份內容:

  • 增長了 HEAD/POST 等新方法
  • 增長了響應狀態碼
  • 增長了版本號
  • 增長了 Header 頭部的概念
  • 增長了 Content-Type,傳輸數據再也不僅限於文本

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

HTTP/1.1

1999 年,HTTP/1.1 發佈了 RFC 文檔,編號爲 2616,從版本號咱們就能夠看到,HTTP/1.1 是對 HTTP/1.0 的小幅度修正。可是一個重要區別是,它是一個正式的標準,而不是一份參考文檔。可是 HTTP/1.1 說是小幅度修正也不太確切,這裏面主要變動點有:

  • 增長了 PUT/DELETE/OPITIONS 等新方法
  • 增長了緩存控制和管理 Cache Control
  • 明確了鏈接管理,容許持久鏈接 Keepalive
  • 容許響應數據分塊,利於傳輸大文件(Chunked)
  • 強制要求 Host 頭

咱們當今世界的全部知名網站,都是在這個時間點左右創立的,能夠說有了 HTTP/1.1,纔開創了 Web 1.0、Web 2.0 時代。

不過,因爲 HTTP/1.1 太過龐大和複雜,所以在 2014 年又進行了一次修訂,拆分爲六份較小的文檔,7230 /7231/7232/7233/7234/7235

這六份文檔增長了兩個大的需求:

  • 加大了 HTTP 的安全性,好比使用 TLS 協議
  • 讓 HTTP 能夠支持更多的應用,目前已經支持四種網絡協議:
    • 傳統的短鏈接
    • 可重用 TCP 的長鏈接模型
    • 服務端 PUSH 模型
    • WebSocket 模型

HTTP/2

HTTP/1.1 存在兩個問題:

  1. 鏈接慢,請求是串行的,須要保證順序,例如一個網頁中可能會有多個資源
  2. 性能差,HTTP/1.1 是以文本的方式,藉助 CPU 的 zip 壓縮方式減小網絡帶寬,可是耗費了 前端和後端的 CPU

2010 年,Google 推出了新的 SPDY 協議,並應用於自家的服務器,HTTP/2 就是以 SPDY 爲基礎的,它的特色主要是:

  • 使用二進制傳輸,再也不是純文本
  • 能夠在一個 TCP 鏈接中併發多個 HTTP 請求,移除了 HTTP/1.1 中的串行請求
  • 使用 HPACK 算法來壓縮頭部
  • 容許服務器主動向客戶端推送數據
  • 加強了安全性,基於 TLS 協議

HTTP/3

HTTP/2 的主要問題有隊頭阻塞問題,也就是說,若干個 HTTP 請求在複用一個 TCP 的鏈接,那麼一旦發生丟包,形成的問題就是全部的請求都必須等待這個丟了的包重傳回來,哪怕這個包不是我這個 HTTP 請求的。

基於此,Google 發明了 QUIC(Quick UDP Internet Connections)協議,它是基於 UDP 的。所以,它就解決了如下幾個問題:

  • UDP 是無序的,所以不存在隊頭阻塞問題
  • QUIC 有一套本身的丟包重傳和擁塞控制的協議
  • HTTPS 握手一般須要六次網絡交互,QUIC 直接將 TLS 和 TCP 合併成了三次握手

因此,QUIC 是一個在 UDP 之上的僞 TCP + TLS + HTTP/2 的多路複用協議。在將來,QUIC 協議成熟了的話,是有可能取代 TCP 協議的。

關注公衆號領取二十套技術圖譜

關注公衆號領取二十套技術圖譜

相關文章
相關標籤/搜索