提到 HTTP2.0 ,第一印象就是:这与 HTTP1.0 的区别是什么,有怎样的改进?
大的版本变化必然会有更强力的特性,那不妨拿来了解一下。
一、先了解 HTTP1.0 和 HTTP1.1
我们先撇开 HTTP2 和 HTTP1 的区别,来说说 HTTP1.0 和 HTTP1.1 的区别,因为它俩本身就存在一些大的区别:
1.长连接;
HTTP 1.0 需要使用 keep-alive 参数来告知服务器端要建立一个长连接,而 HTTP1.1 默认支持长连接。
2.节约带宽
HTTP 1.1 支持只发送 header 信息(不带任何 body 信息),如果服务器认为客户端有权限请求服务器,则返回 100,否则返回 401。
客户端如果接受到 100,才开始把请求 body 发送到服务器。
3.HOST 域
现在可以 web server 例如 tomat,设置虚拟站点是非常常见的,也即是说,web server上的多个虚拟站点可以共享同一个 ip 和端口。
HTTP1.0 是没有 host 域的,HTTP1.1才支持这个参数。
二、HTTP2 新特性
众所周知 ,在 HTTP1.1 协议中 「浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制,超过限制数目的请求会被阻塞」,也就是我们常说的 Pending 状态。
提到 HTTP2 的新特性,有三个特性肯定是亮点:
1.多路复用:
多路复用允许同时通过单一的 HTTP2 连接发起多重的请求-响应消息先来看一张流程对比图。
因此 HTTP2 可以很容易的去实现多流并行而不用依赖建立多个 TCP 连接,HTTP2 把 HTTP 协议通信的基本单位缩小为一个一个的帧。
这些帧对应着逻辑流中的消息,并行地在同一个 TCP 连接上。
这样来说的话,多路复用也为前端性能优化提供了更高效的方式。
2.首部数据压缩
HTTP1.1 不支持 header 数据的压缩,HTTP2.0 使用 HPACK 算法对 header 的数据进行压缩,这样数据体积小了,在网络上传输就会更快。
HTTP1.1 并不支持 HTTP 首部压缩,为此 SPDY 和 HTTP/2 应运而生, SPDY 使用的是通用的 DEFLATE 算法,而 HTTP2 则使用了专门为首部压缩而设计的。
3.服务器推送
当我们对支持 HTTP2.0 的 web server 请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。
这种方式非常合适加载静态资源。
引用 HTTP/2.0 相比 1.0 有哪些重大改进 中的描述:
服务端推送是一种在客户端请求之前发送数据的机制。在 HTTP/2 中,服务器可以对客户端的一个请求发送多个响应。Server Push 让 HTTP1.x 时代使用内嵌资源的优化手段变得没有意义;
如果一个请求是由你的主页发起的,服务器很可能会响应主页内容、logo 以及样式表,因为它知道客户端会用到这些东西。
这相当于在一个 HTML 文档内集合了所有的资源。不过与之相比,服务器推送还有一个很大的优势:可以缓存!也让在遵循同源的情况下,不同页面之间可以共享缓存资源成为可能。
三、关于 HTTP2 性能
说的天花乱坠,HTTP2 不但能多路复用,而且还可以压缩头部数据,以及做一些服务器端推送。
那么,HTTP2 真正的性能到底如何呢?我们来看看深入研究:
https://segmentfault.com/a/1190000007219256
文章做了一些验证试验,这里就不赘述了,我们来看一下试验结果,有一个感性认识。
通过上述一系列的实验,我们可以知道 HTTP2 的性能优势集中体现在“多路复用”和“服务端推送”上。
1.对于请求数目较少(约小于30个)的情况下,HTTP1 和 HTTP2 的性能差异不大,在请求数目较多且延迟大于 30ms 的情况下,才能体现 HTTP2 的性能优势。
2.对于网络状况较差的环境,HTTP2 的性能也高于 HTTP1。
3.与此同时,如果把静态资源都通过服务端推送的方式来处理,加载速度会得到更加巨大的提升。
4.在实际的应用中,由于 HTTP2 多路复用的优势,前端应用团队
无须采取把多个文件合并成一个,生成雪碧图之类的方法减少网络请求。除此之外,HTTP2 对于前端开发的影响并不大。
四、效果演示
对于网络状况较差的环境,HTTP2 的性能也高于 HTTP1。我们可以看看下面这个动图:
可以看出 HTTP1.1 和 HTTP2 在比较接近的服务器延迟 条件下,HTTP2 的加载速度明显要优于 HTTP1。
1.
2.
3.
閱讀更多 F2EAwesome 的文章