1.http1.0
HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,是一种无状态、无连接的应用层协议,几年后被HTTP1.1代替并广泛使用
2.http1.1
基于文本解析把所有请求或者解析作作为纯文本
加入了缓存处理,强缓存和协商缓存
拥有长连接,加入了请求管道化
http1.1流控制基于tcp连接。当连接建立时,两端通过系统默认机制建立缓冲区。并通过ack报文来通知对方接收窗口大小,因为http1.1 依靠传输层来避免流溢出,每个tcp连接需要一个独立的流控制机制
3.http2.0
增加多路复用
增加头部压缩
http2头部压缩又称为HAPCK,设计简单而灵活,是因为HPACK格式有意地简单且不灵活能降低由于实现错误而导致的互操作性或安全问题的风险
http1.1没有头部压缩,随着请求增加,冗余头部字段会不必要地占用带宽,从而显着增加延迟,而头部压缩可消除冗余报头字段,限制已知安全攻击的漏洞,并且在受限环境中使用有限的内存要求
http2拥有新的二进制格式,使用二进制框架层把所有消息封装成二进制,且仍然保持http语法
http2允许客户端和服务器端实现他们自己的流控制机制,而不是依赖传输层,两端在传输层交换可用的缓冲区大小,来让他们在多路复用流上设置自己的接收窗口
http2让服务器可以将响应主动“推送”到客户端缓存中
4.http3.0
http3是为了解决http2相关问题而诞生,它基于一个新的传输层协议QUIC,而http3就是建立一个在QUIC上运行的HTTP新规范,而http3之前的版本都是基于TCP,QUIC就是为了替代TCP,解决TCP的一些缺陷
tcp
不支持流级复用,TCP会将所有对象序列化在同一个流中,因此,它不知道TCP段的对象级分区,无法在同一个流中复用数据包
会产生冗余通信,tco三次连接握手会有冗余的消息交换序列
可能会间歇性地挂起数据传输,tcp中有个因为序列顺序处理丢失的问题的缺陷称为行头阻塞
QUIC
同样拥有头部压缩,并优化了对乱序发送的支持,也优化了压缩率
放弃tcp,通过udp建立,提高了连接建立的速度,降低了延迟
tcp本身是无法解决队头拥塞,quic则解决了这个问题
Connection ID使得http3支持连接迁移以及NAT的重绑定
注意:长连接和多路复用区别
HTTP/1.1 最大的变化就是引入了持久连接(persistent connection),在HTTP/1.1中默认开启 Connection: keep-alive,即TCP连接默认不关闭,可以被多个请求复用。
那么管道机制就是在同一个TCP连接中可以同时发送多个HTTP请求而不用等待上一个请求返回数据后,再发送下一个请求。虽然可以同时发送多个HTTP请求,但是服务器响应是按照请求的顺序进行响应的。
HTTP 2.0的多路复用是在同一个TCP连接中,可以发送多个HTTP请求,而且请求的响应不依赖于前一个请求。每个请求单独处理,不会出现HTTP1.1中上一个请求没有回应便一直等待的情况。

文章详细介绍了HTTP协议从1.0到3.0的发展,包括HTTP1.0的无状态无连接特性,HTTP1.1的缓存处理和长连接,HTTP2.0的多路复用和头部压缩,以及HTTP3.0采用QUIC协议以解决TCP的局限,如头部压缩、连接迁移和降低延迟等。

被折叠的 条评论
为什么被折叠?



