HTTP2服務器推送(Server Push)

引言

一直想要深刻學習 HTTP2的技術細節,可是內容太多,很繁複,須要花不少時間,因此選擇採用片斷式的學習方法,把看到的知識點記錄下來,看成一種學習過程。

文章來自網絡,這裏是原文,方便備查。css

HTTP2的特色

  • 二進制傳輸
  • 頭部壓縮
  • 多路複用
  • 服務器推送(Server Push)

網站加在過程

  1. 首先是瀏覽器請求主頁面 index.html ,服務端相應內容;
  2. 獲取到主頁應答,瀏覽器開始解析主頁的 html 標籤,發現構建 DOM 樹還須要 CSSPNGJS

等資源;html

  1. 發起針對CSSPNGJS的內容請求;
  2. 獲取並解析JSCSS等內容,而後繼續請求依賴資源。

Server Push

服務端接收到客戶端主請求,「預測」主請求的依賴資源,在相應主請求的同時,主動併發推送依賴資源到客戶端。客戶端解析主請求響應後,能夠「無延時」從本地緩存中獲取依賴資源,減小訪問延時,提升訪問體驗,加大了鏈路的併發能力。瀏覽器

推送實現

一、標識依賴資源緩存

推薦依賴資源標識方式:文件內<link>標籤和HTTP頭部攜帶,表示該資源後續會被使用,能夠預請求,關鍵字preload修飾這個資源。服務器

  • 靜態Link標籤法:
Link: <push.css>; rel=preload; as=style
  • HTTP頭表示法:
<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節點指定推送資源

CDN節點針對請求資源配置推送資源, 基礎配置以下:

location ~ 「/simple_push.html$」 {
http2_server_push_url /simple_push.js
}
  • 源站指定推送資源

經過增長響應頭link通知客戶端或者CDN節點,後續但願推送的依賴資源,中間具備推送功能的節點(如CDN節點)能夠基於此信息進行資源請求與推送。

相關文章
相關標籤/搜索