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节点)能够基于此信息进行资源请求与推送。

相关文章
相关标签/搜索