引言
本文主要通过以下四个方面介绍,循序渐进走进HTTP/2:
- HTTP/1.1发明以来发生了哪些变化?
- HTTP/1.1 协议的性能缺陷
- HTTP/2 新特性
- HTTP/2 遗留问题
HTTP/1.1发明以来发生了哪些变化?
近年来,如果你仔细观察那些最流行的网站首页所需要下载的资源的话,会发现一个非常明显的趋势:
- 消息变大 :从几 KB 大小的消息,到几 MB 大小的消息;
- 页面资源变多 :从每个页面不到 10 个的资源,到每页超 100 多个资源;
- 内容形式变多样 :从单纯到文本内容,到图片、视频、音频等内容;
- 实时性要求变高 :对页面的实时性要求的应用越来越多;
正如下图所示,从 2011 年以来, 传输数据大小与平均请求资源数量不断持续增长,并没有减缓的迹象(绿色:传输数据大小,红色:平均请求资源数量):
自从 1997 年 HTTP/1.1 发布以来,我们已经使用 HTTP/1.x 相当长一段时间了,但近几年内容的爆炸式成长使得 HTTP/1.1 越来越无法满足现代网络的需求了
HTTP/1.1 协议的性能缺陷
1. 高延迟:页面访问速度下降
虽然近几年来网络带宽增长非常快,然而我们却并没有看到网络延迟有对应程度的降低,这主要是由于队头阻塞 (Head-Of-Line Blocking)问题导致
HTTP/1.1 版引入了管道机制(pipelining),即在同一个TCP连接里面,客户端可以同时发送多个请求,进一步改进了 HTTP 协议的效率
但这要求服务端必须按照请求发送的顺序返回响应,当顺序请求多个文件时,其中一个请求因为某种原因被阻塞时,在后面排队的所有请求也一并被阻塞,这就是队头阻塞 (Head-Of-Line Blocking)
队头阻塞导致再打的带宽无法被充分利用
因此 人们尝试过以下办法来解决队头阻塞问题:
- 使用多个域名 :将同一个页面的资源分散到不同域名,提升并发连接上限,因为浏览器通常