http协议的演变
HTTP1.1
第一个http版本
严格要求一个请求对应一个回复,如果请求链中任意文件未能接收到,会造成剩余所有文件的阻塞
http1.1使用持久连接,即TCP实现,想要并发请求就得开启多个TCP,容易造成DDos攻击
最致命的缺点:
-
在https标准发布后,TCP握手加HTTPS握手冗余而又臃肿,极大的加大了时延
-
而且TCP为防止流量过大崩溃有慢启动机制,即数据包逐渐增加,一开始很慢,这进一步拉大了时延
-
首部不压缩,cookie每次都要传输造成首部臃肿
HTTP/2
多路复用
在一个TCP请求内可以发起多个请求
- 将首部与实体拆分开来,通过流标识符区分,按照顺序组合,甚至标记流的权重,更类似帧,解决网络层队头阻塞
- 报文首部压缩
- 放弃ascii编码,采用二进制流传输数据
- 基本伴随HTTPS使用
- 支持流控
HTTP/3
- 为了解决传输层的对头阻塞,从而将底层从TCP改为UDP实现,但本质上就是用UDP模仿TCP的理念和原理
- 将TCP握手+TLS握手合并为QUIC握手加速甚至允许短期断联复用
- 默认加密传输
- RTT减少
RTT:Round Trip Tune即一次来回所用的时间,通常认为TCP过程为1RTT,,TLS过程为2RTT,所以HTTP/2需要3或2RTT,取决于TLS版本,HTTP/3首次1RTT,后续恢复通信0RTT
本质上就是在Client Hello与Server Hello传递基础密钥与加密,之后就是加密通信(详见文章https详解)
性能测试
参考视频:HTTP3 HTTP2性能直观对比
稳定网络环境情况下,性能和http2不相伯仲,但是弱网环境下可以无需等待传输失败的数据,有一定优势