一直想要深刻学习 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节点)能够基于此信息进行资源请求与推送。