HTTP1.0、HTTP1.1和HTTP2.0的区别
HTTP1.0、HTTP1.1和HTTP2.0的區別
文章目錄
- HTTP1.0、HTTP1.1和HTTP2.0的區別
- 一、HTTP的歷史
- 二、HTTP的基本優化
- 三、HTTP1.0和HTTP1.1的區別
- 1. 長連接(Persistent Connection)
- 2. 節約帶寬
- 3.HOST域
- 4.緩存處理
- 5.錯誤通知的管理
- 四、SPDY:HTTP1.x的優化
- 五、HTTP和HTTPS的區別
- 六、HTTP1.1和HTTP2.0(SPDY的升級版)的區別
- 1. 多路復用
- 2.頭部數據壓縮
- 3.服務器推送
- 七、HTTP2.0和SPDY的區別
- 八、HTTP2.0的多路復用和HTTP1.X中的長連接復用有什么區別?
一、HTTP的歷史
- 早在 HTTP 建立之初,主要就是為了將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器。
- 也是說對于前端來說,我們所寫的HTML頁面將要放在我們的 web 服務器上,用戶端通過瀏覽器訪問url地址來獲取網頁的顯示內容
- 但是到了 WEB2.0 以來,我們的頁面變得復雜,不僅僅單純的是一些簡單的文字和圖片,同時我們的 HTML 頁面有了 CSS,Javascript,來豐富我們的頁面展示
- 當 ajax 的出現,我們又多了一種向服務器端獲取數據的方法,這些其實都是基于 HTTP 協議的。
- 同樣到了移動互聯網時代,我們頁面可以跑在手機端瀏覽器里面,但是和 PC 相比,手機端的網絡情況更加復雜,這使得我們開始了不得不對 HTTP 進行深入理解并不斷優化過程中。
二、HTTP的基本優化
- 影響一個 HTTP 網絡請求的因素主要有兩個:帶寬和延遲。
- 帶寬:如果說我們還停留在撥號上網的階段,帶寬可能會成為一個比較嚴重影響請求的問題,但是現在網絡基礎建設已經使得帶寬得到極大的提升,我們不再會擔心由帶寬而影響網速,那么就只剩下延遲了。
- 延遲:
- 瀏覽器阻塞(HOL blocking):瀏覽器會因為一些原因阻塞請求。瀏覽器對于同一個域名,同時只能有 4個連接(這個根據瀏覽器內核不同可能會有所差異),超過瀏覽器最大連接數限制,后續請求就會被阻塞。
- DNS 查詢(DNS Lookup):瀏覽器需要知道目標服務器的 IP 才能建立連接。將域名解析為 IP 的這個系統就是 DNS。這個通常可以利用DNS緩存結果來達到減少這個時間的目的。
- 建立連接(Initial connection):HTTP 是基于 TCP 協議的,瀏覽器最快也要在第三次握手時才能捎帶 HTTP請求報文,達到真正的建立連接,但是這些連接無法復用會導致每次請求都經歷三次握手和慢啟動。三次握手在高延遲的場景下影響較明顯,慢啟動則對文件類大請求影響較大。
三、HTTP1.0和HTTP1.1的區別
1. 長連接(Persistent Connection)
- HTTP1.1支持長連接和請求的流水線處理,在一個TCP連接上可以傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗和延遲,在HTTP1.1中默認開啟長連接keep-alive,一定程度上彌補了HTTP1.0每次請求都要創建連接的缺點。HTTP1.0需要使用keep-alive參數來告知服務器端要建立一個長連接。
2. 節約帶寬
- HTTP1.0中存在一些浪費帶寬的現象,例如客戶端只是需要某個對象的一部分,而服務器卻將整個對象送過來了,并且不支持斷點續傳功能。HTTP1.1支持只發送header信息(不帶任何body信息),如果服務器認為客戶端有權限請求服務器,則返回100,客戶端接收到100才開始把請求body發送到服務器;如果返回401,客戶端就可以不用發送請求body了節約了帶寬。
3.HOST域
- 在HTTP1.0中認為每臺服務器都綁定一個唯一的IP地址,因此,請求消息中的URL并沒有傳遞主機名(hostname),HTTP1.0沒有host域。隨著虛擬主機技術的發展,在一臺物理服務器上可以存在多個虛擬主機(Multi-homed Web Servers),并且它們共享一個IP地址。HTTP1.1的請求消息和響應消息都支持host域,且請求消息中如果沒有host域會報告一個錯誤(400 Bad Request)。
4.緩存處理
- 在HTTP1.0中主要使用header里的If-Modified-Since,Expires來做為緩存判斷的標準,HTTP1.1則引入了更多的緩存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的緩存頭來控制緩存策略。
5.錯誤通知的管理
- 在HTTP1.1中新增了24個錯誤狀態響應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生沖突;410(Gone)表示服務器上的某個資源被永久性的刪除。
四、SPDY:HTTP1.x的優化
2012年google如一聲驚雷提出了SPDY的方案,優化了HTTP1.X的請求延遲,解決了HTTP1.X的安全性,具體如下:
- 降低延遲,針對HTTP高延遲的問題,SPDY優雅的采取了多路復用(multiplexing)。多路復用通過多個請求stream共享一個tcp連接的方式,解決了HOL blocking的問題,降低了延遲同時提高了帶寬的利用率。
- 請求優先級(request prioritization)。多路復用帶來一個新的問題是,在連接共享的基礎之上有可能會導致關鍵請求被阻塞。SPDY允許給每個request設置優先級,這樣重要的請求就會優先得到響應。比如瀏覽器加載首頁,首頁的html內容應該優先展示,之后才是各種靜態資源文件,腳本文件等加載,這樣可以保證用戶能第一時間看到網頁內容。
- header壓縮。前面提到HTTP1.x的header很多時候都是重復多余的。選擇合適的壓縮算法可以減小包的大小和數量。
- 基于HTTPS的加密協議傳輸,大大提高了傳輸數據的可靠性。
- 服務端推送(server push),采用了SPDY的網頁,例如我的網頁有一個sytle.css的請求,在客戶端收到sytle.css數據的同時,服務端會將sytle.js的文件推送給客戶端,當客戶端再次嘗試獲取sytle.js時就可以直接從緩存中獲取到,不用再發請求了。 SPDY構成圖:
SPDY位于HTTP之下,TCP和SSL之上,這樣可以輕松兼容老版本的HTTP協議(將HTTP1.x的內容封裝成一種新的frame格式),同時可以使用已有的SSL功能。
五、HTTP和HTTPS的區別
HTTP和HTTPS的區別:https://blog.csdn.net/wolfGuiDao/article/details/105270056
六、HTTP1.1和HTTP2.0(SPDY的升級版)的區別
1. 多路復用
- HTTP2.0使用了多路復用的技術,做到同一個連接并發處理多個請求,而且并發請求的數量比HTTP1.1大了好幾個數量級。HTTP1.1也可以多建立幾個TCP連接,來支持處理更多并發的請求,但是創建TCP連接本身也是有開銷的。
2.頭部數據壓縮
-
在HTTP1.1中,HTTP請求和響應都是由狀態行、請求/響應頭部、消息主體三部分組成。一般而言,消息主體都會經過gzip壓縮,或者本身傳輸的就是壓縮過后的二進制文件,但狀態行和頭部卻沒有經過任何壓縮,直接以純文本傳輸。隨著Web功能越來越復雜,每個頁面產生的請求數也越來越多,導致消耗在頭部的流量越來越多,尤其是每次都要傳輸UserAgent、Cookie這類不會頻繁變動的內容,完全是一種浪費。
-
HTTP1.1不支持header數據的壓縮,HTTP2.0使用HPACK算法對header的數據進行壓縮,這樣數據體積小了,在網絡上傳輸就會更快。
3.服務器推送
-
服務端推送是一種在客戶端請求之前發送數據的機制。網頁使用了許多資源:HTML、樣式表、腳本、圖片等等。在HTTP1.1中這些資源每一個都必須明確地請求。這是一個很慢的過程。瀏覽器從獲取HTML開始,然后在它解析和評估頁面的時候,增量地獲取更多的資源。因為服務器必須等待瀏覽器做每一個請求,網絡經常是空閑的和未充分使用的。
-
為了改善延遲,HTTP2.0引入了server push,它允許服務端推送資源給瀏覽器,在瀏覽器明確地請求之前,免得客戶端再次創建連接發送請求到服務器端獲取。這樣客戶端可以直接從本地加載這些資源,不用再通過網絡。
七、HTTP2.0和SPDY的區別
- HTTP2.0 支持明文 HTTP 傳輸,而 SPDY 強制使用 HTTPS
- HTTP2.0 消息頭的壓縮算法采用 HPACK 而非 SPDY 采用的 DEFLATE
八、HTTP2.0的多路復用和HTTP1.X中的長連接復用有什么區別?
-
HTTP/1.* 一次請求-響應,建立一個連接,用完關閉;每一個請求都要建立一個連接
-
HTTP/1.1 Pipeling解決方式為,若干個請求排隊串行化單線程處理,后面的請求等待前面請求的返回才能獲得執行機會,一旦有某請求超時等,后續請求只能被阻塞,毫無辦法,也就是人們常說的線頭阻塞;
-
HTTP/2多個請求可同時在一個連接上并行執行。某個請求任務耗時嚴重,不會影響到其它連接的正常執行;具體如圖:
-
HTTP/1.*的長鏈接是解決了每次請求都要重新建立鏈接、斷開連接的耗時問題;而HTTP/2.*的多路復用解決的是鏈接建立完成后可以同時進行多組請求和相應的發送,解決串行化請求相應問題
-
而HTTP/2.*多路復用和HTTP管線化類似。
-
HTTP管線化是將多個HTTP要求(request)整批提交的技術,而在傳送過程中不需先等待服務端的回應。管線化機制須通過永久連接(persistent connection)完成,僅HTTP/1.1支持此技術(HTTP/1.0不支持),并且只有GET和HEAD要求可以進行管線化,而POST則有所限制。此外,初次創建連接時也不應啟動管線機制,因為對方(服務器)不一定支持HTTP/1.1版本的協議。
總結
以上是生活随笔為你收集整理的HTTP1.0、HTTP1.1和HTTP2.0的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言实现封装、继承、多态
- 下一篇: 错排详解及案例