HTTP/2協議在2015年就已經正式被髮表了,可是如今有許多網站仍是採用的http/1.1協議,都9102年了,確認不升級一下嗎?想必該有人問了,爲啥要升級,http/1.1用的好好的,http/2有啥優點?css
首先來看一下http/1.1的缺點,也就是http/2的優點所在了。html
對頭阻塞(Head-of-line blocking) HTTP/1.1協議雖然能夠在同一個TCP鏈接上發送多個請求,可是這多個請求是有順序的,必須處理完第一個請求才會響應下一個請求。若是第一個請求處理的特別慢,後面的全部請求就須要排隊。nginx
TCP 鏈接數限制 對於同一個域名,瀏覽器最多隻能同時建立 6 ~ 8 個TCP鏈接。若是一個頁面有十個請求同時發送,那麼只能等第一次的 6 ~ 8 個請求都返回了才能繼續接下來的 2 ~ 4 個請求。這怎麼能行?域名分片
技術應運而生。就是把資源分配到不一樣的域名下(能夠是二級子域名),這樣就解決了限制,愉快~可是濫用域名分片技術也不行,由於每一個TCP鏈接也是很費時的(這個你們都懂的)。算法
Header 內容繁多,有時有可能會超過響應內容,而且每次有許多字段都是重複傳輸。瀏覽器
HTTP/1.1是文本協議傳輸,不夠安全。安全
基於以上缺點,也出現了許多優化手段:雪碧圖、合併腳本和樣式表、資源內聯、域名分片等優化工做,可是若是HTTP協議足夠好的話,本能夠避免這些額外的操做。bash
http2相比於http/1.1的新特性包括:服務器
下面來一一介紹。優化
HTTP/2 複用 TCP 鏈接,在一個鏈接裏,客戶端和瀏覽器均可以同時發送多個請求或迴應,這些請求或迴應在邏輯上分紅了不少流(stream),每一個流中能夠傳輸若干消息(Message),每一個消息由若干最小的二進制幀(Frame)組成。並且不用按照順序一一對應(可是同一個請求或響應的幀必須是有序的,不一樣的能夠無序),這樣就避免了"隊頭堵塞",減小了 TCP 鏈接數量和 TCP 鏈接慢啓動形成的問題。http2還能夠對stream指定優先級,優先級越高的越先響應。好比能夠把js和css的優先級設置的高一些,讓他們優先下載並執行。優先級也能動態的修改。網站
多路複用圖:
HTTP是無狀態的,每次請求都須要附帶一些信息。可是許多字段都是重複的,會浪費帶寬影響速度。 HTTP/2對頭部信息採用HPACK壓縮算法來減小報文頭的大小。具體作法是把報文頭信息中常見的名和值對應一個索引,維護了一張靜態字典,index從1到61,好比把:method:GET映射成2,這樣就能達到壓縮頭部的做用。可是對於一些動態的資源,好比,user-agent,須要維護一份可動態添加內容的共同動態字典,這份動態字典在數據傳輸的過程當中逐步創建,index從62開始。而後將映射以後的數據用huffman編碼。
靜態字典表:
之前是客戶端向服務器請求什麼,服務器就發送什麼,十分吝嗇。如今有了服務端推送,客戶端向服務端要了一滴水,服務端能夠返回整個森林。 這容許服務器直接提供瀏覽器渲染頁面所需資源,而無須瀏覽器在收到、解析頁面後再提起一輪請求,節約了加載時間。好比瀏覽器向服務器請求一個頁面,以前須要等到瀏覽器收到頁面解析html後,發現裏面引用了靜態資源,瀏覽器再向服務器發送靜態資源的請求。可是如今服務器能夠直接將頁面和所需的靜態資源一併返回。
nginx開始HPPT/2很是簡單,只需在HTTPS設置後加上http2便可。
server {
listen 443 ssl http2;
}
複製代碼
講了HTTP/2這麼多的優勢,客官肯定不升級一下嗎?升級以後就能夠對雪碧圖、合併腳本和樣式表、資源內聯、域名分片這些優化say goodbye了。之後誰再問你網站優化都有哪些方法,上面的幾種就不要再說了。