# http协议总结


文章内容来源于[youtube HTTP/1 to HTTP/2 to HTTP/3](https://www.youtube.com/watch?v=a-sBfyiXysI)

#### 1. http/1
每一次请求都会创建一个tcp链接，一个请求完毕之后就会close;
#### 2. http/1.1
与http/1的区别在于：
1. 可以复用连接，多个请求可以使用同一条连接往服务端发送；这样做的好处是节省了每次请求创建一条tcp连接的3次握手
2. 支持了所谓的流水线的技术(pipeline),所谓流水线的技术多个请求可以独立发送，但是这个版本的pipeline其实因为技术原因没有达到预期效果，后期废除，提出了另外一个概念pipeline(head-of-line blocking)，区别在于多个请求发送的过程可以并行，但是对应的返回结果需要按序返回，这就导致如果请求之间是相互干扰和依赖的；不能相互独立
#### 3. http/2
1. 提供了stream的概念，也就是一个tcp连接中存在多个相互独立的流，每一个client可以有一个自己的流，这样可以做到了pipeline；但是因为底层依然是基于tcp的，tcp的协议是保证数据的有序和不丢包的，所以其实同一个tcp内部的流的传输依然还是相互干扰的，不能做到相互独立；stream更加是一个逻辑上的概念，有了这一层从逻辑上来说是可以做到独立了，为后期的http/3做准备
2. 类似于stream response，可以让服务端返回多个消息的感觉..按照之前服务端和client的模型来看的，一问一答变成了一问多答的模型

#### 4. http/3

http/3最大的改变就是从基于TCP变成了机遇QUIC，或者说基于了UDP，QUIC应该是在udp的基础上实现了可靠性的保证的；udp本身没有连接的改变，所以每一个stream就真的是相互独立了，各个stream之间相互不干扰，也真的解决了pipeline阻塞的问题的；
