浅析HTTP/2与HTTP/3的新特性 Posted 2021-04-26 鼎盛中原技术部
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅析HTTP/2与HTTP/3的新特性相关的知识,希望对你有一定的参考价值。
谢新方,来自应用开发中心技术平台组。毕业于中南大学,2019年7月加入中原银行信息技术部,负责统一开发平台前端开发相关工作。 热爱生活,乐观向上,一位不断学习进步的前端菜鸟;爱好种植、手工、旅游等。
互联网的爆炸式发展给Web及HTTP协议带来了新的挑战。目前,Web页面内容从最初以文本为主,转变为以富媒体为主,如图片、声音、视频等, 且对页面内容实时性要求较高的应用也越来越多,如聊天、视频直播等。目前主流的HTTP/1.1版本规定的某些特性,已无法满足现代网络的需求。相较于HTTP/1.1,2015年HTTP/2.0的出现,大幅度提升了Web性能,在与HTTP/1.1完全语义兼容的基础上,进一步减少了网络延迟。但HTTP/2仍存在部分问题,国际互联网工程任务组(IETF)在2018年11月提出,将“HTTP-over-QUIC”实验性协议重命名为HTTP/3,并有望成为HTTP协议的第三个正式版本。
HTTP协议为不断驱动Web快速发展提供了动力,HTTP本身是如何发展的?HTTP/2和HTTP/3又有哪些新特性?它们的现状和未来是怎样的?本文将逐步为大家解答。
Hypertext Transfer Protocol(超文本传输协议)简称HTTP,它是基于TCP/IP协议的一个应用层协议,用于定义Web浏览器与Web服务器之间交换数据的过程。在客户端连上web服务器后,若想获得Web服务器中的某个资源,需遵守一定的通信格式,HTTP协议用于定义客户端与Web服务器通信的格式。
Web页面是如何呈现的?下图的经典场景(浏览器发起HTTP请求)便描述了这一过程,HTTP协议承担了超文本传输的责任,是完成客户端与服务端交互一系列运作流程的关键。可以说,Web是建立在HTTP协议上通信的。
HTTP的发展经历了以下几个阶段。HTTP诞生之初,其设想的基本理念是:借助多文档之间相互关联形成的超文本,连成可互相参阅的万维网。始于1991年的HTTP/0.9并没有作为正式的标准被建立,直到1996年5月,HTTP/1.0才正式作为标准被公布,1997年又相继公布了HTTP/1.1,由IETF负责进行标准化。1999年,HTTP/1.1开始被广泛应用于现在的各大浏览器网络请求中,成为目前主流的HTTP协议版本,但随着Web的日益变化,继续推出更好的协议的要求也不断增加。于是,2015年出现了HTTP/2,它虽大幅度地提升了Web性能,但仍未完全解决建立连接的延迟等问题。于是IETF提出了基于UDP的低时延互联网传输层协议QUIC(Quick UDP Internet Connection),即HTTP/3的前身,并将其逐步标准化。
近年来,加载网站首页需要下载的数据量逐渐增加,已超过2100K。但我们更应该关心的是:平均每个页面为了完成显示与渲染所需要下载的资源数已经超过了100个。
正如下图所示,自2011年以来, 传输数据大小与平均请求资源数量持续增长(下图绿色直线表示传输数据的增长,红色直线表示平均请求资源数量的增长)。
自1997年发布HTTP/1.1以来,我们已经使用它很长一段时间了,但随着互联网的迅速发展,尤其是网络资源的变化,HTTP/1.1满足不了逐渐变化的需求,暴露出越来越多的缺陷:高延迟,导致页面加载速度降低;无状态特性,带来巨大的HTTP头部;明文传输,导致安全问题等等。
考虑到HTTP/1.1的缺陷,我们在工作中会引入雪碧图、将小图内联、使用多个域名等方式来提高性能,但这些优化都绕开了协议,并不能从根本上解决问题。直到2009年,谷歌公开了自行研发的SPDY(speedy)协议,主要解决HTTP/1.1效率不高的问题。谷歌推出SPDY,正式改造了HTTP协议本身。降低延迟,压缩header等等,SPDY的实践证明了这些优化的效果,也最终带来HTTP/2的诞生。
HTTP/1.1有两个主要缺点:安全不足和性能不高。由于背负着 HTTP/1.1 庞大的历史包袱,所以协议的修改,兼容性是首要考虑的目标,否则就会破坏互联网上无数现有的资产。如上图所示,SPDY位于HTTP之下,TCP和SSL之上,这样可以轻松兼容老版本的HTTP协议 (将HTTP1.1的内容封装成一种新的frame格式),同时可以使用已有的SSL功能。
SPDY协议在Chrome浏览器上证明可行后,便被当作HTTP/2的基础,主要特性都在 HTTP/2中得到继承。2015年发布的HTTP/2,它是现行HTTP协议(HTTP/1.1)的替代,但它不是重写,HTTP方法/状态码/语义等都与HTTP/1.1一样。HTTP/2基于SPDY,专注于性能,最大的目标是在用户和网站间只用一个连接。从目前的情况来看,国内外一些排名靠前的站点基本都实现了HTTP/2的部署,并带来了20%~60%的效率提升。
HTTP/2传输数据量的大幅减少, 主要有两个原因: 以二进制方式传输和Header压缩。
HTTP/2采用二进制格式传输数据,而非HTTP/1.1里纯文本形式的报文,它将请求和响应数据分割为更小的帧,并采用二进制编码,使得解析更为高效。
HTTP/2把TCP协议的部分特性挪到应用层,把原来的"Header + Body"的消息"打散"为多个小片的二进制"帧"(Frame), 用"HEADERS"帧存放头数据,用"DATA" 帧存放实体数据。HTTP/2数据分帧后,"Header + Body"的报文结构就完全消失了,协议看到的只是一个个“碎片”。HTTP/2的同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流,每个数据流都以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。
HTTP/2并没有使用传统的压缩算法,而是开发了专门的“HPACK”算法,在客户端和服务器两端建立“字典”,用索引号表示重复的字符串,还采用哈夫曼编码来压缩整数和字符串,可以达到50%~90%的高压缩率。
例如下图中的两个请求,请求1发送了所有的头部字段,第二个请求(请求2)则只需要发送差异数据,这样可以减少冗余数据,降低开销。
HTTP/2还引入了多路复用的技术,很好地解决了浏览器限制同一个域名下请求数量的问题,同时也更容易实现全速传输,毕竟新开一个TCP连接都需要慢慢提升传输速度。如下图所示,多路复用技术只通过一个TCP连接就可以传输所有的请求数据。
HTTP/2还在一定程度上改变了传统的“请求-应答”工作模式,服务器不再完全被动地响应请求,也可以新建“流”主动向客户端发送消息。比如,在浏览器刚请求html 时,就提前把可能会用到的JS、CSS文件发给客户端,减少等待的延迟,这被称为"服务器推送"(Server Push,也叫Cache push)。
HTTP/2相较于HTTP/1.1,大幅度提高了网页的性能,只需升级到该协议,便可减少很多之前需要做的性能优化工作。当然,兼容问题及如何优雅降级,应该是国内还尚未普遍使用的原因之一。虽然HTTP/2解决了很多之前旧版本的问题,但TCP和TCP+TLS建立连接的延时及TCP的队头阻塞等问题,并没有彻底被解决。这是底层支撑的TCP协议造成的,在HTTP/2中并不能得到解决。队头阻塞问题如下图。
规避TCP启动慢的尝试,一直是HTTP协议改善的核心。Google在推出SPDY时,就已经意识到了这些问题,便另起炉灶推出一个基于UDP协议的“QUIC”协议,让HTTP跑在QUIC上,而不是TCP上。这个“HTTP over QUIC”是HTTP协议的下一个大版本HTTP/3,它在HTTP/2的基础上,又实现了质的飞跃,真正“完美”地解决了“队头阻塞”问题。
QUIC是基于UDP的,而UDP是“无连接”的协议,根本就不需要“握手”和“挥手”,所以比TCP来得快。此外,QUIC实现了可靠传输,保证数据一定能够抵达目的地。它还引入了类似 HTTP/2的“流”和“多路复用”,单个“流”是有序的,可能会因丢包而阻塞,但其他“流”不会受到影响。具体来说,QUIC协议具有以下特点:
(1)实现了类似TCP的流量控制和传输可靠性的功能。
虽然UDP不提供可靠性的传输,但QUIC在UDP的基础之上增加了一层,以保证数据可靠性传输。它提供了数据包重传、拥塞控制及其他TCP中存在的特性。
(2)实现了快速握手功能。
互联网通信发展史也是人们与RTT(Round Trip Time)斗争的历史,减少RTT的时间,便是减少网络传输的时间。由于QUIC是基于UDP的,所以QUIC可以实现使用0-RTT或1-RTT建立连接,这意味着QUIC可以用最快的速度来发送和接收数据,极大提升了首次打开页面的速度。0RTT建立连接可以说是QUIC相比HTTP2最大的性能优势。
(3)集成了TLS加密功 能。
目前,QUIC使用的是TLS1.3,相较于早期版本,TLS1.3拥有更多优点,其中最重要的一点是减少了握手所花费的RTT个数。
(4)多路复用,彻底解决TCP中队头阻塞的问题。
与TCP不同的是,QUIC实现了在同一物理连接上可以有多个独立的逻辑数据流(如下图)。实现了数据流的单独传输,便解决了TCP中队头阻塞的问题。
互联网及Web技术的发展日新月异。从最初的静态网页到W3C诞生,再到动态页面、javascript 的崛起,作为Web基础的HTTP协议也经历了多个阶段。下一阶段的出现,总是伴随着解决上一阶段的问题,不断优化和改进。
本文并未提及HTTP协议诸如状态码、请求头等具体应用中遇到的细节问题,而是以介绍新协议特性的方式展开。HTTP/1.1是目前使用最为广泛的HTTP协议,HTTP2.0也正处于逐步应用到线上产品和服务的阶段。在未来可能仍会产生需要优化的问题,但基于UDP的HTTP/3解决了网络传输的难题,作为一种新的标准,在传输层提供了更多优势,使用范围也在不断增加,HTTP/3未来可期。作为工程师,我们需要了解这些协议背后的细节,才能打造高性能的网络框架,从而提升我们的产品体验。
1.陶辉,《web协议详解与抓包实践》,极客时间。
2.上野宣,《图解HTTP》。
3.Leo Zhang,《HTTP/2相比1.0有哪些重大改进》的回答,知乎。
4.Sergio De Simone,《HTTP/3的现状:全世界使用服务接近30万》,InfoQ。
以上是关于浅析HTTP/2与HTTP/3的新特性的主要内容,如果未能解决你的问题,请参考以下文章
深度学习框架PaddlePaddle的新特性与炼成之路
java8的新特性1
Java16的新特性
JDK各个版本的新特性
浅析chrome新特性之默认使用HTTPS,追溯源头至HSTS
Day765.Redis 6.0的新特性:多线程客户端缓存与安全 -Redis 核心技术与实战