HTTP/0.9 --> HTTP/1.0 --> HTTP/1.1 --> SPDY --> HTTP/2web
主要新特性:ajax
爲何提出HTTP/2?api
網頁請求的資源愈來愈大,愈來愈多,人們對於網頁加載的速度的容忍度愈來愈低,要求愈來愈高。而HTTP/1.1的協議仍是20年前的協議,當時的背景是網頁請求數少,網頁中資源小。所以,亟需升級協議以提升網站的性能。HTTP/2的主要任務就在於此。緩存
+首部性能優化
+響應碼服務器
+重定向cookie
+錯誤網絡
+條件請求socket
+內容編碼(壓縮)async
+更多的請求方法(GET POST ...)
......
×缺乏強制的Host首部
×不能讓多個請求共用一個鏈接
×緩存的選擇簡陋
相比於HTTP/1.1
當前web應用每一個頁面可能引用數百個對象,關聯數十個域名,網絡環境相差迥異,設備處理能力良莠不齊。這種狀況下提供表現一致且迅速的web體驗不簡單。保證用戶在網站上交互體驗的流暢性,得重視理解客戶端獲取頁面和渲染頁面步驟,從而使得在協議上作出的改進實實在在的提高web的性能。
web頁面請求
資源請求/獲取
把待請求url放入隊列 --> 解析url中域名的IP地址 --> 創建與目標TCP鏈接 --> 若是是HTTPS,初始化並完成TLS握手 --> 向頁面對應的url發送請求
資源響應/渲染
接收響應-->是HTML,則解析-->對頁面引用進行有限排序-->添加引用資源到請求隊列-->等待
-->不是HTML,判斷關鍵資源沒有接收完成 --> 等待
關鍵資源接受完成 --> 渲染頁面 --> 還要繼續接受其餘資源 --> 等待
--> 無其餘資源,頁面渲染結束
關鍵性能指標
H1面臨的問題
DNS查詢優化
ajax.googleapis.com
:頁面中加入標籤<link rel="dns-prefetch" href="//ajax.googleapis.com">
, 這樣在下載處理主頁面的同時,預取指令就能開始解析指定的域名。優化TCP鏈接
<link rel="preconnect" href="//fonts.example.com">
避免重定向
客戶端緩存
客戶端緩存TTL(生存時間),設置HTTP首部cache-control及max-age(單位秒),或者expires首部。
網絡邊緣緩存
hold'til told!
條件緩存
304 Not Modified狀態碼,若請求資源發生了變化,則直接返回資源;若請求資源未發生變化,則直接返回內容沒變的提示消息:HTTP首部包含Last-Modified-Since, 請求體中包含實體校驗碼ETag。
壓縮和代碼極簡化
極簡化 --> 無損壓縮(gzip,deflate, brotli)
CSS資源放在JS資源和圖片以前
圖片優化
針對於HTTP/1.1適用,但對於H2來講拔苗助長的作法,由於HTTP/2對於每一個域名只會開啓一個鏈接。HTTP/2能夠並行處理多個請求。