前言
什么是HTTP
HTTP全称是Hyper Text Transfer Protocol,中文意思是超文本传输协议。它是在 Web 上进行数据交换的基础,是一种 client-server 协议,也就是说,请求通常是由像浏览器这样的接受方发起的。一个完整的 Web 文档通常是由不同的子文档拼接而成的,像是文本、布局描述、图片、视频、脚本等。
HTTP1.0特性
每次请求都会建立一次TCP连接,处理完立即断开,这种方式叫做短连接。短连接会导致有大量的“握手报文”和“挥手报文”占用了带宽。
HTTP1.1特性
默认使用Connection: keep-alive,避免重复建立TCP连接和断开,这种连接方式叫长连接。但是服务器会按照请求的顺序去返回响应的内容,无法存在并行响应。
HTTP2.0特性
二进制流和帧
相比于1.0的文本进制,HTTP2.0使用了二进制数据流和帧,用帧对数据进行标识,这样可以实现并行响应,客户端接收到数据根据帧的标识对数据进行合并,不会出现错乱。
多路复用
HTTP2.0只需要一个TCP连接即可建立多次响应。
头部压缩
HTTP1.x头部数据都是以纯文本形式发送,而HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小
服务器推送
服务器还可以额外的向客户端推送资源。
HTTP3.0特性-QUIC协议(Quick UDP Internet Connection)
无队头阻塞
虽然HTTP2.0的多路复用解决了HTTP层的队头阻塞,但TCP层还是存在队头阻塞问题(一帧帧的数据流可能是乱序到达的,需要收集完所有数据排序整理后才能传递至下一层,如果丢失了某个包,就会出现队头阻塞)。所以基于UDP层的QUIC协议诞生了
快速连接
基于UDP作为传输层协议,QUIC的握手连接更快,并且使用了最新的TLS协议,可以支持客户端无需等待握手完成就开始发送数据,实现了快速连接
连接迁移
在网络切换的时候,例如wifi切换到4G数据,TCP必须建立新的连接才继续传输。而QUIC协议使用了64位随机数作为连接的ID,可以继续连接,不会重连。
总结:
- HTTP1.0:为无状态 、无连接
- HTTP1.1:可以持久连接,新增缓存处理,支持断点传输
- HTTP2.0:使用二进制分帧,多路复用,头部压缩,服务器推送
- HTTP3.0: 无队头阻塞,快速连接,连接迁移平滑