天天看點

HTTP協定發展曆程

HTTP協定發展曆程

HTTP

超文本傳輸協定是一個用于傳輸超文本文檔的應用層協定,它是為

Web

浏覽器與

Web

伺服器之間的通信而設計的,

HTTP

協定到目前為止全部的版本可以分為

HTTP 0.9

HTTP 1.0

HTTP 1.1

HTTP 2.0

HTTP 3.0

,其中現在普遍應用的版本是

HTTP 1.1

版本,正在推進

HTTP 2.0

版本,以及未來的

HTTP 3.0

版本。

HTTP 0.9

HTTP 0.9

也被稱為單行協定,最初版本的

HTTP

協定并沒有版本号,後來它的版本号被定位在

0.9

以區分後來的版本,

HTTP 0.9

極其簡單,請求由單行指令構成,以唯一可用方法

GET

開頭,其後跟目标資源的路徑。

HTTP 0.9

的響應内容并不包含

HTTP

頭,這意味着隻有

HTML

檔案可以傳送,無法傳輸其他類型的檔案,也沒有狀态碼或錯誤代碼,出現異常時一個特殊的包含問題描述資訊的

HTML

檔案将被響應傳回。

特點

  • 隻有一個請求行,并沒有

    HTTP

    請求頭和請求體。
  • 伺服器沒有傳回頭資訊,隻傳回資料資訊。
  • 第三個是傳回的檔案内容是以ASCII 字元流來傳輸的,因為都是HTML 格式的檔案,是以使用ASCII 位元組碼來傳輸是最合适的。

HTTP 1.0

HTTP 1.0

建構了可擴充性,為了滿足傳輸多種類型檔案的需求,為了讓用戶端和伺服器能更深入地交流,

HTTP 1.0

引入了請求頭和響應頭,它們都是以為

Key-Value

形式儲存的,在

HTTP

發送請求時,會帶上請求頭資訊,伺服器傳回資料時,會先傳回響應頭資訊。

  • 協定版本資訊會随着每個請求發送,即

    HTTP 1.0

    被追加到了

    GET

    行。
  • 引入請求頭,在發起請求時候會通過

    HTTP

    請求頭告訴伺服器它期待伺服器傳回什麼類型的檔案、采取什麼形式的壓縮、提供什麼語言的檔案以及檔案的具體編碼。
  • 引入響應頭,伺服器以請求頭中資訊準備資料,并以響應頭的資訊告訴用戶端資料采用何種格式傳回,倘若遇到不支援的格式,隻能傳回伺服器支援的格式,并在響應頭中展現,也就是說最終浏覽器是以響應頭的資訊解析資料。
  • 引入狀态碼,狀态碼會在響應開始時發送,使浏覽器能了解請求執行成功或失敗,并相應調整行為。
  • 引入了緩存機制,通過狀态碼與

    If-Modified-Since

    Expires

    等控制更新或使用本地緩存。
  • 引入了

    Content-Type

    頭,使

    HTTP

    具備了傳輸除純文字

    HTML

    檔案以外其他類型文檔的能力。

HTTP 1.1

HTTP 1.1

是标準化的協定,

HTTP 1.1

消除了大量歧義内容并引入了多項改進。

  • 緩存處理,

    HTTP 1.1

    引入了更多的緩存控制政策,例如

    Entity tag

    If-Unmodified-Since

    If-Match

    If-None-Match

    等更多可供選擇的緩存頭來控制緩存政策。
  • 帶寬優化以及網絡連接配接的使用,在請求頭中引入了

    range

    ,它允許隻請求資源的某一個部分,即傳回

    206

    狀态碼,這樣友善了開發者自由選擇以便充分利用帶寬和連結,并且可以使用

    Range

    Content-Range

    制作斷點續傳功能。
  • 錯誤通知的管理,在

    HTTP 1.1

    中新增了

    24

    個錯誤狀态碼。
  • 增加

    Host

    請求頭,能夠使不同域名配置在同一個

    IP

    位址的伺服器上。
  • 支援長連接配接,

    HTTP 1.1

    支援長連接配接,在一個

    TCP

    連接配接上可以傳輸多個

    HTTP

    請求和響應,減少了建立和關閉連接配接的消耗和延遲,在

    HTTP 1.1

    中預設開啟

    Connection:keep-alive

    ,一般浏覽器對于同一個域名允許同時建立

    6

    個長連結。
  • 增加管線化技術,允許在第一個應答被完全發送之前就發送第二個請求,以改善隊頭阻塞問題,但響應的順序還是會按照請求的順序傳回。
  • 支援響應分塊,通過設定

    Transfer-Encoding: chunked

    進行分塊響應,允許響應的資料可以分成多個部分,配合服務端盡早釋放緩沖可以獲得更快的響應速度。

HTTP 2.0

HTTP 2.0

擁有更優異的表現,現網頁愈漸變得的複雜,甚至演變成了獨有的應用,媒體的播放量,增進互動的腳本大小也增加了許多,更多的資料通過

HTTP

請求被傳輸,由此

HTTP 2.0

為網絡效率做了大量的優化。

  • 二進制分幀,

    HTTP 2.0

    是二進制協定而不是文本協定,将所有傳輸的資訊分割為更小的消息和幀,并對它們采用二進制格式的編碼。
  • 多路複用,并行的請求能在同一個連結中處理,在同一域名下所有通路都是從同一個

    TCP

    連接配接中走,

    HTTP

    消息被分解為獨立的幀,服務端根據辨別符和首部将消息重新組裝起來,移除了

    HTTP 1.1

    中順序和阻塞的限制。
  • 壓縮

    header

    header

    在一系列請求中常常是相似的,其移除了重複和傳輸重複資料的成本。
  • 服務端推送,伺服器可以主動地向用戶端推送資源,而無需用戶端明确的請求。

HTTP 3.0

HTTP 3.0

目前處于制訂和測試階段,是未來的全新的

HTTP

協定,

HTTP 3.0

協定運作在

QUIC

協定之上,是在

UDP

的基礎上實作了可靠傳輸,權衡傳輸速度與傳輸可靠性并加以優化,使用

UDP

将避免

TCP

的隊頭阻塞問題,并加快網絡傳輸速度,但同樣需要實作可靠傳輸的機制,

HTTP 3.0

不是

HTTP 2.0

的拓展,

HTTP 3.0

将會是一個全新的協定。

每日一題

https://github.com/WindrunnerMax/EveryDay
           

參考

https://www.cnblogs.com/heluan/p/8620312.html
https://www.lizenghai.com/archives/67621.html
https://juejin.im/post/5ce37660f265da1bb13f05f0
https://www.chainnews.com/zh-hant/articles/401950499827.htm
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP