HTTP的现状
HTTP/1.1自从1999年发布以来已经很长时间了,随着互联网的爆炸式发展,从当初网页内容以文本为主,到现在以富媒体(如图片、声音、视频)为主。聊天、视频直播 等实时性应用越来越多, HTTP/1.1协议的特性,已经无法满足现代网络的需求了。
HTTP2.0是自1999年http1.1发布后的首个更新。
HTTP/2 相比于 HTTP/1.1,大幅度提高了网页的性能,只需要服务端升级到HTTP/2 协议就可以减少很多之前需要做的性能优化工作。
保持与HTTP 1.1语义的向后兼容性也是HTTP/2 的一个关键目标。
兼容问题以及如何优雅降级是国内还不普遍使用的原因。
现在,几乎所有互联网上的内容都采用了HTTP 1.1作为通信协议。
HTTP/1.1的缺陷
HTTP 1.1包含了太多细节和可选的部分,这让它变得过于庞大。
HTTP 1.1对网络延迟非常敏感。部分原因是HTTP pipelining还存有很多问题,大部分桌面浏览器选择默认关闭HTTP pipelining这一功能。
线头阻塞(Head-of-line blocking)
HTTP pipelining是这样一种技术:多个HTTP请求放到一个TCP连接中一一发送,而且不需要等待服务器对前一个请求的响应;客户端还是要按照发送请求的顺序来接收响应。这就像在超市收银台排队时一样,你并不知道前面的顾客会用时多久,如果前一个请求非常耗时(顾客磨蹭),那么后续请求都会受到影响,这就是所谓的线头阻塞(head-of-line blocking)。
近几年来网络带宽增长非常快,然而我们并没有看到网络延迟有对应程度的降低。网络延迟问题主要由于线头阻塞又叫队头阻塞(Head-Of-Line Blocking),导致带宽无法被充分利用。
队头阻塞是指当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一并被阻塞,会导致客户端迟迟收不到数据。针对队头阻塞,人们尝试过以下办法来解决:
Header冗余信息多
Header 内容多,而且每次请求 Head