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 连接发起多重的请求-响应消息


头部压缩


更多特性
- 不用断开连接来重置流
- 流量控制
- 服务端推送

谁在使用
- 天猫
- 腾讯

海猫云平台
总结:
单连接多资源的方式,减少服务端的链接压力,内存占用更少,连接吞吐量更大,由于 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

