HTTP1.0和HTTP1.1以及HTTP2.0的區別


HTTP1.0和HTTP1.1區別

版本 HTTP1.0 HTTP1.1
連接方面 使用 非持久連接,即在非持久連接下,一個tcp連接只傳輸一個web對象。每次請求和響應都需要建立一個單獨的連接,每次連接只是傳輸一個對象,嚴重影響客戶機和服務器的性能 默認使用持久連接(然而,HTTP/1.1協議的客戶機和服務器可以配置成使用非持久連接)在持久連接下,不必爲每個Web對象的傳送建立一個新的連接,一個連接中可以傳輸多個對象。在一個TCP連接上可以傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗和延遲。HTTP 1.1的持續連接,也需要增加新的請求頭來幫助實現,例如,Connection請求頭的值爲Keep-Alive時,客戶端通知服務器返回本次請求結果後保持連接;Connection請求頭的值爲close時,客戶端通知服務器返回本次請求結果後關閉連接。HTTP 1.1還提供了與身份認證、狀態管理和Cache緩存等機制相關的請求頭和響應頭。並且不允許同時存在兩個並行的響應。
緩存方面 主要使用header裏的If-Modified-Since,Expires來做爲緩存判斷的標準 引入了更多的緩存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的緩存頭來控制緩存策略帶寬優化及網絡連接的使用
狀態碼 無狀態 新增了24個錯誤狀態響應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生衝突;410(Gone)表示服務器上的某個資源被永久性的刪除
寬帶優化 存在一些浪費帶寬的現象,例如客戶端只是需要某個對象一部分,而服務器卻將整個對象送過來了,並且不支持斷點續傳功能 支持只發送header信息(不帶任何body信息),如果服務器認爲客戶端有權限請求服務器,則返回100,否則返回401。客戶端如果接收到100,纔開始把請求body發送到服務器。這樣當服務器返回401的時候,客戶端就可以不用發送請求body了,節約了帶寬。
Host頭 HTTP1.0中認爲每臺服務器都綁定一個唯一的IP地址,因此,請求消息中的URL並沒有傳遞主機名(hostname)。但隨着虛擬主機技術的發展,在一臺物理服務器上可以存在多個虛擬主機(Multi-homed Web Servers),並且它們共享一個IP地址。 HTTP1.1的請求消息和響應消息都應支持Host頭域,且請求消息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)

HTTP1.0和HTTP1.1區別預覽圖

HTTP1.0和HTTP1.1以及HTTP2.0的區別

HTTP1.0和HTTP1.1現存的問題

  1. HTTP1.x在傳輸數據時,每次都需要重新建立連接,無疑增加了大量的延遲時間,特別是在移動端更爲突出
  2. HTTP1.x在傳輸數據時,所有傳輸的內容都是明文,客戶端和服務器端都無法驗證對方的身份,無法保證數據的安全性
  3. HTTP1.x在使用時,header裏攜帶的內容過大,增加了傳輸的成本,並且每次請求header基本不怎麼變化,尤其在移動端增加用戶流量
  4. 雖然HTTP1.x支持了keep-alive,來彌補多次創建連接產生的延遲,但是keepalive使用多了同樣會給服務端帶來大量的性能壓力,並且對於單個文件被不斷請求的服務(例如圖片存放網站),keep-alive可能會極大的影響性能,因爲它在文件被請求之後還保持了不必要的連接很長時間

HTTPS

  爲解決安全問題,網景在1994年創建了HTTPS。HTTPS就是安全版的HTTP,目前大型網站基本實現全站HTTPS

HTTPS簡介

  1. HTTPS協議需要到CA申請證書,一般免費證書很少,需要交費
  2. HTTP協議運行在TCP之上,所有傳輸的內容都是明文,HTTPS運行在SSL/TLS之上,SSL/TLS運行在TCP之上,所有傳輸的內容都經過加密的
  3. HTTP和HTTPS使用的是不同的連接方式,端口不同,前者是80,後者是443
  4. HTTPS可以有效的防止運營商劫持,解決了防劫持的一個大問題
  5. HTTPS 中的SSL握手等過程降低用戶訪問速度,但是隻要經過合理優化和部署,HTTPS 對速度的影響完全可以接受

SPDY

  SPDY:2009年,谷歌研發,綜合HTTPS和HTTP兩者有點於一體的傳輸協議

SPDY主要特點

  1. 降低延遲,針對HTTP高延遲的問題,SPDY優雅的採取了多路複用(multiplexing)。多路複用通過多個請求stream共享一個tcp連接的方式,解決了HOL blocking的問題,降低了延遲同時提高了帶寬的利用率
  2. 請求優先級(request prioritization)。多路複用帶來一個新的問題是,在連接共享的基礎之上有可能會導致關鍵請求被阻塞。 PDY允許給每個request設置優先級,重要的請求就會優先得到響應。比如瀏覽器加載首頁,首頁的html內容應該優先展示,之後纔是各種靜態資源文件,腳本文件等加載,可以保證用戶能第一時間看到網頁內容
  3. header壓縮。 HTTP1.x的header很多時候都是重複多餘的。選擇合適的壓縮算法可以減小包的大小和數量
  4. 基於HTTPS的加密協議傳輸,大大提高了傳輸數據的可靠性
  5. 服務端推送(server push),採用了SPDY的網頁,例如網頁有一個sytle.css的請求,在客戶端收到sytle.css數據的同時,服務端會將sytle.js的文件推送給客戶端,當客戶端再次嘗試獲取sytle.js時就可以直接從緩存中獲取到,不用再發請求了

HTTP2.0

  HTTP2.0是SPDY的升級版

HTTP2.0特性

  1. 頭信息和數據體都是二進制,稱爲頭信息幀和數據幀
  2. 複用TCP連接,在一個連接裏,客戶端和瀏覽器都可以同時發送多個請求或迴應,且不用按順序一一對應,避免了“隊頭堵塞“,此雙向的實時通信稱爲多工(Multiplexing)
  3. 引入頭信息壓縮機制(header compression),頭信息使用gzip或compress壓縮後再發送;客戶端和服務器同時維護一張頭信息表,所有字段都會存入這個表,生成一個索引號,不發送同樣字段,只發送索引號,提高速度
  4. HTTP/2 允許服務器未經請求,主動向客戶端發送資源,即服務器推送(server push)

HTTP2.0和SPDY的區別

  1. HTTP2.0 支持明文 HTTP 傳輸,而 SPDY 強制使用 HTTPS
  2. HTTP2.0 消息頭的壓縮算法採用 HPACK,而非 SPDY 採用的 DEFLATE

HTTP1.1和HTTP2.0的區別

版本 HTTP1.1 HTTP2.0
多路複用 在HTTP/1.1協議中,瀏覽器客戶端在同一時間針對同一域名的請求有一定數據限制。超過限制數目的請求會被阻塞 HTTP2.0使用了多路複用的技術,做到同一個連接併發處理多個請求,而且併發請求的數量比HTTP1.1大了好幾個數量級。而這個強大的功能則是基於“二進制分幀”的特性。
首部壓縮 不支持header數據的壓縮 使用HPACK算法對header的數據進行壓縮,這樣數據體積小了,在網絡上傳輸就會更快
服務器推送 當我們對支持HTTP2.0的web server請求數據的時候,服務器會順便把一些客戶端需要的資源一起推送到客戶端,免得客戶端再次創建連接發送請求到服務器端獲取。這種方式非常合適加載靜態資源
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章