HTTP1/2/3版本演进过程?

778 阅读4分钟

HTTP 协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol。它是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议。设计 HTTP 的初衷是为了提供一种发布和接收 HTML 页面的方法。

一、从HTTP0.9到HTTP3.0

HTTP/0.9

HTTP/0.9 因为需求简单,就是用来传输体积很小的 HTML 文件,所以和服务器之间的通信过程也相对简单。

HTTP/1.0

由于万维网的快速崛起,带来了大量新的需求,其中最核心的一个就是需要支持多种类型的文件下载, 为此 HTTP/1.0 中引入了请求头和响应头。在支持多种类型文件下载的基础之上,HTTP/1.0 还提供了 Cache 机制、用户代理、状态码等一些基础信息。

HTTP/1.1

但随着技术和需求的发展,人们对文件传输的速度要求越来越高,故又基于 HTTP/1.0 推出了 HTTP/1.1,增加了持久连接方法来提升连接效率,同时还尝试使用管线化技术提升效率(不过由于各种原因,管线化技术最终被各大厂商放弃了)。除此之外,HTTP/1.1 还引入了 Cookie、虚拟主机的支持、对动态内容的支持等特性

HTTP/2.0

虽然 HTTP/1.1 在 HTTP/1.0 的基础之上做了大量的优化,但是由于一些效率问题始终很难解决,如TCP 的慢启动、多条 TCP 连接竞争带宽和队头阻塞。所以最终还是被 HTTP/2 所取代。HTTP/2 是采用多路复用机制来解决这些问题的多路复用是通过在协议栈中添加二进制分帧层来实现的,有了二进制分帧层还能够实现请求的优先级、服务器推送、头部压缩等特性,从而大大提升了文件传输效率。

虽然 HTTP/2 解决了 HTTP/1.1 中的队头阻塞问题,但是 HTTP/2 依然是基于 TCP 协议的,而 TCP 协议依然存在数据包级别的队头阻塞问题。

HTTP/2 中所存在的一些问题,主要包括了 TCP 的队头阻塞、建立 TCP 连接的延时、TCP 协议僵化等问题。

HTTP/3.0

这些问题都是 TCP 的内部问题,因此要解决这些问题就要优化 TCP 或者“另起炉灶”创造新的协议。由于优化 TCP 协议存在着诸多挑战,所以官方选择了创建新的 QUIC 协议。这套协议解决了 HTTP/2 中因 TCP 而带来的问题,即HTTP3.0,不过由于是改动了底层协议,所以推广起来还会面临着巨大的挑战。

二、总结

HTTP/0.9 仅用来传输体积较小的HTML文件,过于简单.

HTTP/1.0 引入了请求头,支持多种类型的文件下载,还引入了Cache机制、状态码、用户代理等特性。但速度较慢,有许多改进的地方.

HTTP/1.1 支持长连接,减少了三次握手和四次挥手的时间,提高了传输速率。还引入了Cookie机制,虚拟主机和对动态内容的支持等特性,但速度还是较慢,还可以改进.

HTTP/2.0 引入了二进制分帧层,实现了多路复用,解决了应用层面的队头阻塞的问题,并且改进持久连接,每一个域名只建立一个TCP连接,减少了TCP慢启动和TCP连接竞争带宽等问题。此外,HTTP2还能实现请求的优先级,服务器推送,头部压缩等特性.但HTTP2/0速度存在瓶颈,这个瓶颈主要是TCP本身的机制造成的,如TCP连接建立的延时问题、TCP队头阻塞问题.

HTTP/3.0 由于TCP优化困难(中间设备僵化、操作系统内核TCP僵化等),直接去掉了TCP,采用了Quic协议。Quic协议由于TCP协议的僵化,推广还需要相当长的一段时间。【Quic 协议可看作TCP+HTTP/2 的多路复用 +TLS(Transport Layer Security Protocol) 等功能】.

Quic协议集合①集成了TSL(安全传输层协议),实现了加密功能;②基于UDP,实现了快速握手,提升首屏渲染速度;③在UDP的上层增加了一层,保证了数据传输的可靠性,包括数据重传、拥塞控制以及其他一些TCP中存在的特性;④实现了HTTP2中的多路复用功能。但和TCP不同的是,在同一物理连接上可以有多个独立的逻辑数据流,解决队头阻塞问题.