說說你對http、https、http2.0的理解?
HTTP的基本優化
影響一個HTTP網絡請求的因素主要有兩個:帶寬和延遲。
帶寬
javascript
若是說咱們還停留在撥號上網的階段,帶寬可能會成爲一個比較嚴重影響請求的問題,可是如今網絡基礎建設已經使得帶寬獲得極大的提高,咱們再也不會擔憂由帶寬而影響網速,那麼就只剩下延遲了。html
延遲java
- 瀏覽器阻塞(HOL blocking):瀏覽器會由於一些緣由阻塞請求。瀏覽器對於同一個域名,同時只能有 4 個鏈接(這個根據瀏覽器內核不一樣可能會有所差別),超過瀏覽器最大鏈接數限制,後續請求就會被阻塞。
- DNS 查詢(DNS Lookup):瀏覽器須要知道目標服務器的 IP 才能創建鏈接。將域名解析爲 IP 的這個系統就是 DNS。這個一般能夠利用DNS緩存結果來達到減小這個時間的目的。
- 創建鏈接(Initial connection):HTTP 是基於 TCP 協議的,瀏覽器最快也要在第三次握手時才能捎帶 HTTP 請求報文,達到真正的創建鏈接,可是這些鏈接沒法複用會致使每次請求都經歷三次握手和慢啓動。三次握手在高延遲的場景下影響較明顯,慢啓動則對文件類大請求影響較大。
HTTP的版本
HTTP做爲互聯網中使用最普遍的網絡協議,確定是不斷改進的結果。而改進的動力簡單來講就是對傳輸速度的追求。chrome
在不斷的改進中,HTTP存在有如下幾個版本:HTTP/0.九、HTTP/1.0、HTTP/1.一、HTTP/2。瀏覽器
0.9
已過期。只接受GET一種請求方法,沒有在通信中指定版本號,且不支持請求頭。因爲該版本不支持POST方法,所以客戶端沒法向服務器傳遞太多信息。
HTTP/1.0
這是第一個在通信中指定版本號的HTTP協議版本,至今仍被普遍採用,特別是在代理服務器中。
HTTP/1.1
持久鏈接被默認採用,並能很好地配合代理服務器工做。還支持以管道方式在同時發送多個請求,以便下降線路負載,提升傳輸速度。
HTTP/1.1相較於HTTP/1.0協議的區別主要體如今:
緩存處理
帶寬優化及網絡鏈接的使用
錯誤通知的管理
消息在網絡中的發送
互聯網地址的維護
安全性及完整性
HTTP/2
當前版本,於2015年5月做爲互聯網標準正式發佈。
複製代碼
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每次請求都要建立鏈接的缺點。
HTTPS
做用?
不使用SSL/TLS
的HTTP
通訊,就是不加密的通訊。全部信息明文傳播,帶來了三大風險。安全
- 竊聽風險(eavesdropping):第三方能夠獲知通訊內容。
- 篡改風險(tampering):第三方能夠修改通訊內容。
- 冒充風險(pretending):第三方能夠冒充他人身份參與通訊。
SSL/TLS
協議是爲了解決這三大風險而設計的,但願達到:
- 全部信息都是加密傳播,第三方沒法竊聽。
- 具備校驗機制,一旦被篡改,通訊雙方會馬上發現。
- 配備身份證書,防止身份被冒充。
互聯網是開放環境,通訊雙方都是未知身份,這爲協議的設計帶來了很大的難度。並且,協議還必須可以經受全部匪夷所思的攻擊,這使得SSL/TLS
協議變得異常複雜。
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,淘寶網等網站,利用chrome控制檯能夠查看是否啓用H2。
參考:
SSL/TLS協議運行機制的概述服務器
HTTPS和HTTP2.0詳解
網絡