HTTP,HTTPS,SPDY,HTTP2.0你該知道的一些...

HTTP,HTTPS,SPDY,HTTP2.0

1:HTTP的發展歷程

此處輸入圖片的描述

2: HTTP的基本優化

  • 帶寬:如果說我們還停留在撥號上網的階段,帶寬可能會成爲一個比較嚴重影響請求的問題,但是現在網絡基礎建設已經使得帶寬得到極大的提升,我們不再會擔心由帶寬而影響網速,那麼就只剩下延遲了。
  • 延遲:
    • 瀏覽器阻塞(HOL blocking):瀏覽器會因爲一些原因阻塞請求。瀏覽器對於同一個域名,同時只能有 6 個連接(這個根據瀏覽器內核不同可能會有所差異),超過瀏覽器最大連接數限制,後續請求就會被阻塞。
    • DNS 查詢(DNS Lookup):瀏覽器需要知道目標服務器的 IP 才能建立連接。將域名解析爲 IP 的這個系統就是 DNS。這個通常可以利用DNS緩存結果來達到減少這個時間的目的。
    • 建立連接(Initial connection):HTTP 是基於 TCP 協議的,瀏覽器最快也要在第三次握手時才能捎帶 HTTP 請求報文,達到真正的建立連接,但是這些連接無法複用會導致每次請求都經歷三次握手。

3:HTTP1.0和HTTP1.1的一些區別

HTTP1.0最早在網頁中使用是在1996年,那個時候只是使用一些較爲簡單的網頁上和網絡請求上,而HTTP1.1則在1999年纔開始廣泛應用於現在的各大瀏覽器網絡請求中,同時HTTP1.1也是當前使用最爲廣泛的HTTP協議。
  • 主要區別主要體現在
    • 緩存處理,在HTTP1.0中主要使用header裏的If-Modified-Since,Expires來做爲緩存判斷的標準,HTTP1.1則引入了更多的緩存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的緩存頭來控制緩存策略。
    • 帶寬優化及網絡連接的使用,HTTP1.0中,存在一些浪費帶寬的現象,例如客戶端只是需要某個對象的一部分,而服務器卻將整個對象送過來了,並且不支持斷點續傳功能,HTTP1.1則在請求頭引入了range頭域,它允許只請求資源的某個部分,即返回碼是206(Partial Content),這樣就方便了開發者自由的選擇以便於充分利用帶寬和連接。
    • 錯誤通知的管理,在HTTP1.1中新增了24個錯誤狀態響應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生衝突;410(Gone)表示服務器上的某個資源被永久性的刪除。
    • Host頭處理在HTTP1.0中認爲每臺服務器都綁定一個唯一的IP地址,因此,請求消息中的URL並沒有傳遞主機名(hostname)。但隨着虛擬主機技術的發展,在一臺物理服務器上可以存在多個虛擬主機(Multi-homed Web Servers),並且它們共享一個IP地址。HTTP1.1的請求消息和響應消息都應支持Host頭域,且請求消息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)
    • 長連接,HTTP 1.1支持長連接(PersistentConnection)和請求的流水線(Pipelining)處理,在一個TCP連接上可以傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗和延遲,在HTTP1.1中默認開啓Connection: keep-alive,一定程度上彌補了HTTP1.0每次請求都要創建連接的缺點:如圖:
      此處輸入鏈接的描述

4:HTTP1.0和1.1現存的一些問題

  • HTTP1.x在傳輸數據時,所有傳輸的內容都是明文,客戶端和服務器端都無法驗證對方的身份,這在一定程度上無法保證數據的安全性。
  • HTTP1.x在使用時,header裏攜帶的內容過大,在一定程度上增加了傳輸的成本,並且每次請求header基本不怎麼變化,尤其在移動端增加用戶流量。
  • 雖然HTTP1.x支持了keep-alive,來彌補多次創建連接產生的延遲,但是keep-alive使用多了同樣會給服務端帶來大量的性能壓力,

5:HTTPS與HTTP的一些區別

  • HTTPS協議需要到CA申請證書,一般免費證書很少,需要交費。
  • HTTP協議運行在TCP之上,所有傳輸的內容都是明文,HTTPS運行在SSL/TLS之上,SSL/TLS運行在TCP之上,所有傳輸的內容都經過加密的。
  • HTTPS可以有效的防止運營商劫持,解決了防劫持的一個大問題。
    此處輸入圖片的描述

6. 使用SPDY加快你的網站速度

2012年google提出了SPDY的方案,是Google開發的基於TCP的傳輸層協議,用以最小化網絡延遲,提升網絡速度,優化用戶的網絡使用體驗,SPDY可以說是綜合了HTTPS和HTTP兩者有點於一體的傳輸協議,主要解決:
1. 降低延遲,針對HTTP高延遲的問題,SPDY優雅的採取了多路複用(multiplexing)。多路複用通過多個請求stream共享一個tcp連接的方式,解決了HOL blocking的問題,降低了延遲同時提高了帶寬的利用率。
2.請求優先級(request prioritization)。多路複用帶來一個新的問題是,在連接共享的基礎之上有可能會導致關鍵請求被阻塞。SPDY允許給每個request設置優先級,這樣重要的請求就會優先得到響應。比如瀏覽器加載首頁,首頁的html內容應該優先展示,之後纔是各種靜態資源文件,腳本文件等加載,這樣可以保證用戶能第一時間看到網頁內容。
3.header壓縮。前面提到HTTP1.x的header很多時候都是重複多餘的。選擇合適的壓縮算法可以減小包的大小和數量。
4.基於HTTPS的加密協議傳輸,大大提高了傳輸數據的可靠性。
5.服務端推送(server push),採用了SPDY的網頁,例如我的網頁有一個sytle.css的請求,在客戶端收到sytle.css數據的同時,服務端會將sytle.css的文件推送給客戶端,當客戶端再次嘗試獲取sytle.css時就可以直接從緩存中獲取到,不用再發請求了。SPDY構成圖:
此處輸入圖片的描述
SPDY位於HTTP之下,TCP和SSL之上,這樣可以輕鬆兼容老版本的HTTP協議(將HTTP1.x的內容封裝成一種新的frame格式),同時可以使用已有的SSL功能。
Duang,But
IETF(互聯網工程任務組)對谷歌提出的SPDY協議進行了標準化,於2015年5推出了類似於SPDY協議的 HTTP 2.0 協議標準(簡稱HTTP/2)。谷歌因此宣佈放棄對SPDY協議的支持,轉而支持HTTP/2

HTTP/2.0

顧名思義有了HTTP1.x,那麼HTTP2.0也就順理成章的出現了。HTTP2.0可以說是SPDY的升級版(其實原本也是基於SPDY設計的),但是,HTTP2.0 跟 SPDY 仍有不同的地方,主要是以下兩點:

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

HTTP2.0的新特性

  • 新的二進制格式(Binary Format),HTTP1.x的解析是基於文本。基於文本協議的格式解析存在天然缺陷,文本的表現形式有多樣性,要做到健壯性考慮的場景必然很多,二進制則不同,只認0和1的組合。基於這種考慮HTTP2.0的協議解析決定採用二進制格式,實現方便且健壯。
  • 多路複用(MultiPlexing),即連接共享,即每一個request都是是用作連接共享機制的。一個request對應一個id,這樣一個連接上可以有多個request,每個連接的request可以隨機的混雜在一起,接收方可以根據request的 id將request再歸屬到各自不同的服務端請求裏面。多路複用原理圖:
    此處輸入圖片的描述

  • header壓縮,如上文中所言,對前面提到過HTTP1.x的header帶有大量信息,而且每次都要重複發送,HTTP2.0使用encoder來減少需要傳輸的header大小,通訊雙方各自cache一份header fields表,既避免了重複header的傳輸,又減小了需要傳輸的大小。

  • 服務端推送(server push),同SPDY一樣,HTTP2.0也具有server push功能。目前,有些網站已經啓用HTTP2.0,例如YouTuBe,google
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章