http1.0,http1.1和http2.0,看看http的优化历程

http1.0版本

我们的http1.0中,我们每次传输数据,都需要进行一次tcp连接。发一次请求,tcp连接一次,这样就好麻烦也好慢啊!

http1.1版本

那我们怎么办?于是,出现了http1.1版本,来解决这个问题。我们使用了keep-alive长连接的新技术,解决了上面的问题。我们现在是tcp连接一次,就可以发送很多次请求。是不是很好?

但是,还是有缺陷,等上一次请求完了,我才能进行下一次的请求等待。(阻塞)啊,我还需要排队,好慢啊!!!

http2.0版本

好的,那最终方案http2.0出来了,我们再次的升级,使用我们的多路复用的最新型技术。那我就引入二进制,流,帧的概念。我可以让你在一次tcp连接中,一次性发送多个请求,并且把数据变成二进制的形式提升解析效率(之前使用的是文本的形式)。实现一个并发请求的形式。这下你总该满意了吧!

那我们在讲一讲http2.0多路复用实现中使用到的二进制,流,帧的概念
我们都知道,http的实现是依赖着tcp完成的。
知识点1:我们的http是应用层,tcp是数据传输层。

那我们http需要传递请求头,请求体是以键值对的形式存在的。
在这里插入图片描述
而我们做的第一步,是把这些键值对的数据转化为二进制的形式。之后把这些二进制交付给tcp。而我们tcp传输的是数据报,分为数据头和数据体,对应的是http中的请求头和请求体。二进制化之后,我们把不同的请求拆分成不同的流,不同的流又被分格成不同的帧。
知识点2:帧是tcp中数据的单位,流是由很多个的数据帧组成的。
之后我们对数据帧加入id(表示属于哪一个请求),之后又加入序号,类型(属于数据头还是数据体)。对齐进行传输,接受之后对流的id进行分类,并对齐进行重新的排序和组装。

所以是实现传输无需,最后接受后进行组装。