最近一段时间以来,关于HTTP/3的新闻有很多,越来越多的国际大公司已经开始使用HTTP/3了。
所以,HTTP/3已经是箭在弦上了,全面使用只是个时间问题,那么,作为一线开发者,我们也是时候了解下到底什么是HTTP/3,为什么需要HTTP/3了。
于是,我准备开始写这篇文章,但是要想把HTTP/3的事情说清楚,一定绕不过的问题就是HTTP/2,所以写着写着,篇幅越来越多,于是我就把他们分成了上下两篇。
这一篇我们主要来回顾下HTTP/2,然后再来重点看一下HTTP/2存在哪些问题,为什么要被弃用。
HTTP/2 辉煌不在?
虽然HTTP/2标准在2015年5月就以RFC 7540正式发表了,并且多数浏览器在2015年底就支持了。
但是,真正被广泛使用起来要到2018年左右,但是也是在2018年,11月IETF给出了官方批准,认可HTTP-over-QUIC成为HTTP/3。
2018年的时候,那时候HTTP/2还是个新技术,刚刚开始有软件支持,短短两年过去了,现在HTTP/3已经悄然而至了。
**根据W3Techs的数据,截至2019年6月,全球也仅有36.5%的网站支持了HTTP/2。**所以,可能很多网站还没开始支持HTTP/2,HTTP/3就已经来了。
所以,对于很多网站来说,或许直接升级HTTP/3是一个更加正确的选择。
回顾 HTTP/2
我默认大家对HTTP/2有了一定的基本了解。
我们知道,HTTP/2的诞生,主要是为了解决HTTP/1.1中的效率问题,HTTP/2中最核心的技术就是多路复用技术,即允许同时通过单一的HTTP/2.0连接发起多重的请求-响应消息。
同时还实现了二进制分帧、header压缩、服务端推送等技术。
从HTTP/1.0诞生,一直到HTTP/2,在这24年里,HTTP协议已经做过了三次升级,但是有一个关键的技术点是不变的,那就是这所有的HTTP协议,都是基于TCP协议实现的。
流水的HTTP,铁打的TCP。这是因为相对于UDP协议,TCP协议更加可靠。
虽然在HTTP/1.1的基础上推出HTTP/2大大的提升了效率,但是还是有很多人认为这只是个"临时方案",这也是为什么刚刚推出没多久,业内就开始大力投入HTTP/3的研发与推广了。
而这背后的深层次原因也正是因为他还是基于TCP协议实现的。TCP协议虽然更加可靠,但是还是存在着一定的问题,接下来具体分析下。
HTTP/2 问题
队头阻塞
队头阻塞翻译自英文head-of-line blocking,这个词并不新鲜,因为早在HTTP/1.1时代,就一直存在着队头阻塞的问题。
但是很多人在一些资料中会看到有论点说HTTP/2解决了队头阻塞的问题。但是这句话只对了一半。
只能说HTTP/2解决了HTTP的队头阻塞问题,但是并没有解决TCP队头阻塞问题!
如果大家对