http协议详解入门(浅谈HTTP3下一代超文本传输协议)
http协议详解入门(浅谈HTTP3下一代超文本传输协议)图4 HTTP/1.1重用TCP连接传输在HTTP/1.1中,默认开启长连接Keep-alive,允许客户端重用TCP连接,且在一个TCP连接上可以传送多个HTTP请求和响应,可有效减少建立TCP连接的三次握手开销。但是,请求仍然必须一个接一个地序列化,TCP连接只能同时进行一次HTTP请求/响应交换,如果当前请求阻塞,则TCP连接无法复用,从而易导致单个TCP连接使用效率低,请求并发性处理缓慢。尤其是随着网站请求资源的增加,请求并发性越来越大,重用TCP连接对于页面展示效率的提升效果也越来越差。 HTTP/1.1重用TCP连接传输如图4所示。图2 不同版本HTTP的TCP/IP参考模型层次结构在HTTP/1.0中,客户端和服务器之间的每次请求都会创建一个新的TCP连接,每个请求必须等待TCP和TLS完成三次握手之后才能执行,从而造成每次请求都会有延迟。另外,TCP连接建立后需要“慢启动”
文 / 70号实验室
众所周知,TCP/IP协议族是互联网的基础,也是当今最流行的组网形式。其中,位于TCP/IP应用层上的超文本传输协议(Hypertext Transfer Protocol,HTTP)既是一种可用于分布式、协作式和超媒体信息系统的应用程序协议,也是实现万维网数据通信的重要基础。HTTP基于B/S架构进行通信,服务器端实现程序有Apache httpd、Nginx等,客户端实现程序主要是Web浏览器。随着互联网的发展和Web2.0的诞生,HTTP已广泛应用于Web端、移动客户端App、H5及小程序等超媒体系统。TCP/IP四层参考模型的层次结构如图1所示。
图1 TCP/IP四层参考模型的层次结构
1.什么是HTTP/3HTTP/3 是HTTP协议标准的第三个版本,主要使用基于UDP的QUIC协议实现,以使Web浏览更快、更安全。目前,尽管HTTP/3仍处于草案状态,但Google Chrome、Microsoft Edge、Firefox等浏览器已经从2020年4月即开始实验性支持HTTP/3。其中,QUIC协议是由Google制定的一种基于UDP的低时延的互联网传输层协议。QUIC最初由Google开发,于2013年首次发布,之后于2015年引入IETF(负责维护未联网协议的标准组织)开始其标准化过程,目前仍处于开发阶段。不同版本HTTP的TCP/IP参考模型层次结构如图2所示。
图2 不同版本HTTP的TCP/IP参考模型层次结构
2.为什么需要HTTP/3在HTTP/1.0中,客户端和服务器之间的每次请求都会创建一个新的TCP连接,每个请求必须等待TCP和TLS完成三次握手之后才能执行,从而造成每次请求都会有延迟。另外,TCP连接建立后需要“慢启动”的预热时间,即由TCP拥塞控制算法确定可以传输的数据量,从而在网络发生拥塞之前避免让无法处理的数据包涌入网络,但这种缓慢的启动过程易导致其无法立即使用可用的网络带宽。基于TCP TLS的HTTP/1.0请求/响应步骤如图3所示。
图3 基于TCP TLS的HTTP/1.0请求/响应步骤
在HTTP/1.1中,默认开启长连接Keep-alive,允许客户端重用TCP连接,且在一个TCP连接上可以传送多个HTTP请求和响应,可有效减少建立TCP连接的三次握手开销。但是,请求仍然必须一个接一个地序列化,TCP连接只能同时进行一次HTTP请求/响应交换,如果当前请求阻塞,则TCP连接无法复用,从而易导致单个TCP连接使用效率低,请求并发性处理缓慢。尤其是随着网站请求资源的增加,请求并发性越来越大,重用TCP连接对于页面展示效率的提升效果也越来越差。 HTTP/1.1重用TCP连接传输如图4所示。
图4 HTTP/1.1重用TCP连接传输
在HTTP/2中,“HTTP流”的概念允许将不同的请求/响应交换同时复用到同一个TCP连接上,即“多路复用”,从而使同一个TCP连接能并发处理多个HTTP请求,既提高了HTTP请求处理速度,也提高了单个TCP连接的使用效率。同时,HTTP/2通过使用HPACK算法对头部数据进行压缩,缩小了数据体积,缩短了数据传输时长。 HTTP/2请求/响应步骤如图5所示。 但是,TCP的作用是以正确的顺序从一个端点向另一端点传递整个字节流,当承载某些字节的TCP数据包在网络路径上丢失时,将会在字节流中造成间隙。对此,当TCP在检测到丢包时,往往通过重新发送数据包来填充间隙,即使丢失的数据仅涉及单个请求,TCP也无法将丢失字节后已成功交付的字节都传递到应用程序,因此其他请求最终会经历不必要的延迟,这一现象通常被称为行首阻塞问题。
图5 HTTP/2请求/响应步骤
HTTP/3使用QUIC传输,进一步扩展了HTTP/2的多路复用,同一QUIC连接允许QUIC流共享,QUIC流之间则相互独立传输,即单个丢包不会导致连接停止并等待或影响其他数据传输,从而可有效避免行首阻塞问题。另外,QUIC结合了TCP三次握手和TSL 1.3握手的方式,默认在连接时就提供加密和身份验证,最终更快、更安全地建立连接,且即使客户端与服务端需要建立新的QUIC连接,数据开始传输前的等待时间也比使用TLS的TCP短得多。此外,QUIC协议使用流ID取代TCP协议的IP和端口,还可实现连接迁移,比如当手机从4G/5G切换到WiFi网络,下层的IP和端口均会发生改变,但由于QUIC的流ID没变,那么该连接不变,因此可以继续使用这个连接传输。基于QUIC的HTTP/3请求/响应步骤如图6所示。基于不同传输协议的HTTPS连接的往返时间对比如图7所示。
图6 基于QUIC的HTTP/3请求/响应步骤
图7 基于不同传输协议的HTTPS连接的往返时间对比
3.如何使用HTTP/3在服务器端方面,目前多家云厂商已经开始支持HTTP/3,比如腾讯云的负载均衡器、阿里云的CDN服务、Cloud Flare等。2019年,Cloud Flare开源了QUIC的实现库Quiche,并提供了在Android、iOS等客户端以及Curl工具及Nginx Web服务器端支持HTTP/3的改造方案。值得注意的是,服务端支持HTTP/3必须配置含Alt-svc的头部属性,因HTTP/3请求流程是客户端先发起TCP连接来判断服务端响应头是否有Alt-svc头,如有则尝试使用UDP 443进行连接。Alt-Svc(备选服务,Alternative-Service)列举当前站点备选的访问方式列表,一般用于提供支持QUIC等新兴协议并向下兼容。
在浏览器端方面,Google Chrome、Microsoft Edge、Firefox等浏览器从2020年4月以来均已实验性支持HTTP/3。以Chrome为例,在chrome://flags中将Experimental QUIC protocol设置为enable,重启后即可使用HTTP/3。
4.HTTP/3的应用价值随着移动端应用的迅猛兴起,已有超过50%的互联网流量使用无线传输。但是,在无线覆盖率不足的情况下,TCP行首阻塞问题严重影响了网络浏览体验,而HTTP/3可在无法使用高速无线网络的地区最大程度地改善上网体验。
Google公司的一些初步实验证明,QUIC作为部分热门服务的底层传输协议,极大提高了网络传输速度和用户体验。例如,部署QUIC作为底层传输协议的YouTube视频流的缓冲率下降了30%,Google搜索延迟减少了2%以上,PC客户端吞吐量增加了3%以上,移动设备的客户端吞吐量增加了7%以上。
HTTP/3是一个全新的Web协议,基于QUIC协议并集成了新一代安全传输协议TLS 1.3加密,不仅减少了建立连接的握手延迟,且不存在TCP的行首阻塞问题,同时还支持连接迁移,从而可成为万维网走向未来的强力支撑。
对于金融领域来说,HTTP/3同样有助于提升整体的网络体验,而且对于弱网场景的提升尤其显著。此外,伴随短视频、直播等新兴业务场景的出现,金融行业对于稳定的高带宽、低延迟等诉求也逐渐凸显,HTTP/3通过将拥塞控制算法/参数调控到连接粒度,可灵活适应同一个App内的不同业务场景(如RPC/短视频/直播等)的网络需求,进而使4G/5G等基础设施提供的传输能力得到最大化利用。