HTTP/2協議在2015年就已經正式被髮表了,可是如今有許多網站仍是採用的http/1.1協議,都9102年了,確認不升級一下嗎?想必該有人問了,爲啥要升級,http/1.1用的好好的,http/2有啥優點?css
首先來看一下http/1.1的缺點,也就是http/2的優點所在了。html
域名分片
技術應運而生。就是把資源分配到不一樣的域名下(能夠是二級子域名),這樣就解決了限制,愉快~可是濫用域名分片技術也不行,由於每一個TCP鏈接也是很費時的(這個你們都懂的)。基於以上缺點,也出現了許多優化手段:雪碧圖、合併腳本和樣式表、資源內聯、域名分片等優化工做,可是若是HTTP協議足夠好的話,本能夠避免這些額外的操做。nginx
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了。之後誰再問你網站優化都有哪些方法,上面的幾種就不用說了。