http2.0

http1.1 ---?---> 2.0

  • 2012 年 3 月:征集 HTTP/2 建议
  • 2012 年 11 月第一个 HTTP/2 草案(基于 SPDY)
  • 2014 年 8 月:HTTP/2 草案 17 和 HPACK 草案 12 发布
  • 2014 年 8 月:工作组最后一次征集 HTTP/2 建议
  • 2015 年 2 月:IESG 批准 HTTP/2 和 HPACK 草案
  • 2015 年 5 月:RFC 7540 (HTTP/2) 和 RFC 7541 (HPACK) 发布

先来看看1.1的问题

  • 每个连接都是单独的,打开一个页面需要建立很多连接,但同一个域名下的连接数有限制,超过一定数量就会被阻塞,给人页面卡住的感觉
  • http是在TCP层之上的,建立时的三次握手需要1.5个RTT(round-trip time),在高延迟的场景会受影响大
  • TCP有拥塞控制,是慢启动的,这会让原本突发性和短时性的http连接效率低下
  • 对于同一个页面,每个请求的头部信息其实大部分都是相同的

技巧?

  • 图片合并,把多个icon、png合成一张图片,通过css来读取,减少请求数,缺点就是没用到的也一起下载了,某一个图标如果缓存更新,得下载大图,浪费流量
  • 内容内嵌,把图片通过base64编码到html一起加载,资源难以管理,和html绑在一起
  • js、css文件打包合并,同样也是单个文件修改会导致整个文件变动,缓存不好控制
  • 把资源文件放在多个CDN域名,绕过浏览器限制,可以建立很多连接,但同时消耗更多资源(移动端不适合这么干),而且会受TCP慢启动影响

SPDY

  • 多路复用
  • 请求优先级
  • header压缩

http协议增强版

google的试验性技术,chrome支持

http

spdy

ssl

tcp

 

2012-2016停止维护

http2.0协议

使用二进制帧传输

HTTP 2.0中的二进制分帧层,客户端和服务器可以把HTTP消息分解为互不依赖的帧,然后乱序发送,最后再在另一端把它们重新组合起来。

当然这些流也是可以设置优先级的,每个流都可以带有一个31比特的优先值

连接复用

允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息

头部压缩

更多特性

  • 不用断开连接来重置流
  • 流量控制
  • 服务端推送

谁在使用

  • Google
  • 天猫
  • 腾讯

海猫云平台

总结:

单连接多资源的方式,减少服务端的链接压力,内存占用更少,连接吞吐量更大,由于 TCP 连接的减少而使网络拥塞状况得以改善,同时慢启动时间的减少,使拥塞和丢包恢复速度更快

浏览器兼容性

  • IE11、Edge14
  • Firefox
  • Chrome
  • Safari10.1、iOS-Safari(v2016-09-13)
  • Android5-6.x

具体可以参考

http://caniuse.com/#search=http2

不兼容的浏览器将会自动降级到1.1

目前主流浏览器实现的http2.0都是在ssl层上的,即是https 2.0,但是协议制定是不强制走ssl层的

最后说几句

谢谢

参考

1、https://developers.google.com/web/fundamentals/performance/http2/?hl=zh-cn

http2.0

By chilezhang

http2.0

http2

  • 762