超文本傳輸協議(HTTP)是用於傳輸諸如HTML的超媒體文檔的應用層協議。它被設計用於Web瀏覽器和Web服務器之間的通訊,但它也能夠用於其餘目的。 HTTP遵循經典的客戶端-服務端模型,客戶端打開一個鏈接以發出請求,而後等待它收到服務器端響應。 HTTP是無狀態協議,意味着服務器不會在兩個請求之間保留任何數據(狀態)。雖然一般基於TCP / IP層,但能夠在任何可靠的傳輸層上使用;也就是說,一個不會靜默丟失消息的協議,如UDP。javascript
HTTP Strict Transport Security (一般簡稱爲HSTS) 是一個安全功能,它告訴瀏覽器只能經過HTTPS訪問當前資源, 禁止HTTP方式.css
Strict Transport Security解決了這個問題;只要你經過HTTPS請求訪問銀行網站,而且銀行網站配置好Strict Transport Security,你的瀏覽器知道自動使用HTTPS請求,這能夠阻止黑客的中間人攻擊的把戲。html
開啓HSTS只須要當經過HTTPS方式訪問你的網站時,返回 Strict-Transport-SecurityHTTP 頭信息: Strict-Transport-Security: max-age=expireTime [; includeSubdomains]java
2012年google如一聲驚雷提出了SPDY的方案,你們纔開始從正面看待和解決老版本HTTP協議自己的問題,SPDY能夠說是綜合了HTTPS和HTTP二者有點於一體的傳輸協議,主要解決:算法
SPDY位於HTTP之下,TCP和SSL之上,這樣能夠輕鬆兼容老版本的HTTP協議(將HTTP1.x的內容封裝成一種新的frame格式),同時可使用已有的SSL功能。chrome
HTTP2.0能夠說是SPDY的升級版(其實本來也是基於SPDY設計的),可是,HTTP2.0 跟 SPDY 仍有不一樣的地方,主要是如下兩點瀏覽器
● HTTP2.0 支持明文 HTTP 傳輸,而 SPDY 強制使用 HTTPS緩存
● HTTP2.0 消息頭的壓縮算法採用 HPACK,而非 SPDY 採用的 DEFLATE安全
● 新的二進制格式(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:
chrome=>Network=>Name欄右鍵=>√Protocol
複製代碼