一直想要深刻學習 HTTP2的技術細節,可是內容太多,很繁複,須要花不少時間,因此選擇採用片斷式的學習方法,把看到的知識點記錄下來,看成一種學習過程。文章來自網絡,這裏是原文,方便備查。css
index.html
,服務端相應內容;html
標籤,發現構建 DOM
樹還須要 CSS
、PNG
、JS
等資源;html
CSS
、PNG
、JS
的內容請求;JS
和CSS
等內容,而後繼續請求依賴資源。服務端接收到客戶端主請求,「預測」主請求的依賴資源,在相應主請求的同時,主動併發推送依賴資源到客戶端。客戶端解析主請求響應後,能夠「無延時」從本地緩存中獲取依賴資源,減小訪問延時,提升訪問體驗,加大了鏈路的併發能力。瀏覽器
一、標識依賴資源緩存
推薦依賴資源標識方式:文件內<link>
標籤和HTTP頭部攜帶,表示該資源後續會被使用,能夠預請求,關鍵字preload
修飾這個資源。服務器
Link: <push.css>; rel=preload; as=style
<link rel="preload" href="push.css" as="style">
其中rel
代表了資源</push.css>
是預加載的,as
代表了資源的文件類型。另外,link
還能夠用nopush
修飾,表示瀏覽器可能已經有該資源緩存,指示有推送能力的服務端不主動推送資源,只有當瀏覽器先檢查到沒有緩存,纔去指示服務端推送資源,nopush
格式寫成:網絡
Link: </app/script.js>; rel=preload; as=script;nopush
二、推送資源併發
用戶訪問CDN,主要包括直接訪問的邊緣節點, 若干中間節點和客戶源站,路徑中的每層均可以對請求作分析,預測可能的依賴資源,經過插入靜態<link>
標籤或者增長響應頭部返回給瀏覽器。 CDN的推送主要採用頭部攜帶推送信息。app
客戶端經過url
或者請求頭說明須要的資源url
,寫法以下:curl
Url:http://http2push.gtimg.com/simple_push.html?req-push=simple_push.js
或者:學習
GET /simple_push.html HTTP/1.1 Host: http2push.gtimg.com User-Agent: curl/7.49.1 Accept: */* X-Push-Url: simple_push.js
CDN節點針對請求資源配置推送資源, 基礎配置以下:
location ~ 「/simple_push.html$」 { http2_server_push_url /simple_push.js }
經過增長響應頭link
通知客戶端或者CDN節點,後續但願推送的依賴資源,中間具備推送功能的節點(如CDN節點)能夠基於此信息進行資源請求與推送。