计算机网络 | 07.[HTTP篇]HTTP/1.0、HTTP/1.1和HTTP/2.0

1. HTTP/1.1的特点

总之 HTTP/1.1 的性能一般般,后续的 HTTP/2 和 HTTP/3 就是在优化 HTTP 的性能。

1.1. 默认使用长连接

什么是长连接和短连接?(长链接、短链接)什么时候使用长连接、短链接?

HTTP/1.0默认使用「短连接」,如果需要改用长连接,则需要在请求头中加入 Connection: Keep-Alive,服务端收到响应后同样在响应头加上该字段。

而HTTP/1.1默认采用「长连接」,减少了TCP连接的重复建立和断开而造成的额外开销

  • [短连接] 可以理解为「短期有效连接」,每进行一次HTTP请求和响应,就建立一次TCP连接,并在这次HTTP操作结束后立马断开TCP连接。
  • [长连接] 可以理解为「长期有效连接」,在建立TCP连接并完成某次HTTP操作后,不会立马断开TCP连接,而是维持一段时间,在此期间如果始终没有数据交互,就会断开TCP连接
短连接和长连接.drawio

1.2. 管道网络传输(解决请求的队头阻塞问题)

指在同一个 TCP连接 中,客户端可以连续发起多个请求,只要第一个请求成功发送,不必等待它的响应,就可以继续发送第二个请求,从而 减少了「整体响应时间」,也解决了「请求的队头阻塞」问题。

管道网络传输.drawio

1.3. 响应的队头阻塞

尽管管道网络传输使得请求可以连续发送(也就是解决了「请求的队头阻塞」),但响应却不一定会连续返回。

若某一个请求的响应由于某种原因无法及时返回,队中其他请求的响应将会被阻塞,这就是HTTP/1.1「响应的队头阻塞」问题。

响应的队头阻塞.drawio

1.4. 其他缺陷(性能瓶颈)

  • 只能压缩body,无法压缩头部;
  • 头部冗长且需要重复发送;
  • 没有优先级控制;
  • 请求只能从客户端开始,服务端只能被动响应。

2. HTTP/2.0的特点

HTTP 2 是什么, 它真的能让页面打开更快么

HTTP (原理 && 实践) HTTP2 优点

HTTP/2 没有强制要求 TLS

2.1.头部压缩

客户端和服务端共同维护一张「头部信息表」,所有的头部字段都存入表中,并生成索引号。当下次请求或响应会用到同样的字段时,不再发送完整的头部文本,而是发送 该头部在表中的索引号,即「将完整的头部文本压缩成索引号」。

HTTP2的头部压缩.drawio

2.2. 二进制分帧

消息:这里指HTTP/2中的请求和响应;

:一个或多个「帧」组成一个「消息」;

HTTP / 1 的请求和响应报文,都是由起始行、首部和实体正文(可选)组成,各部分之间以文本换行符分隔。 HTTP/2 将请求和响应数据分割为更小的帧,并且它们采用二进制编码。

在HTTP/1.1中,数据传输使用「文本」的形式,在另一方接收到数据后,需要先将文本转成二进制,才能正常解析;

在HTTP/2.0中,数据传输使用「二进制」的形式,另一方接收后可以直接解析,大幅提升速度。

HTTP/2.0中,头信息和数据体都是二进制的,并且统称为「」,即「头信息帧」和「数据帧」。

image-20220803171832054

2.3. 多路复用

  • 一个「TCP链接」中可以有一个或多个「Stream(流)」;
  • 一个「Stream(流)」中可以有一个或多个「消息(请求/响应)」;
  • 一个「消息(请求/响应)」由多个「Frame(帧)」组成。

多路复用,就是在同一个「TCP连接」中,将若干个「并发的消息」,拆解成若干个「二进制帧」并以不确定的顺序发送。另一方在接收到这些「二进制帧」后,按顺序将它们重新排序以得到「消息」的二进制形式,随后被直接解析。

由于消息都被拆分成帧,即使某一个请求无法及时作出响应,也不会阻塞其他的响应,会优先将能传的传回来,仍在处理的响应会被放在之后传输。

  • 同一「流」的「帧」必须严格有序,不同「流」的帧可以乱序;

  • 客户端的流编号为奇数,服务端的流编号为偶数。

多路复用

2.4. 主动推送

在HTTP/1.1中,所有的资源都必须由客户端发起请求,才能返回给客户端;

而HTTP/2.0支持 主动推送(但又不是完全主动),比较常见的应用场景是:

客户端首次访问页面时,会发起请求获取HTML资源,服务端将会响应体中存放HTML,同时 在此次响应中通知客户端,即将有其他的资源被一并推送过来

随后服务端在第二个流中,将后续即将被加载的js、css等文件发送给客户端,而客户端则会将这部分数据缓存起来,一会儿要用的时候,直接从缓存中获取。

image-20220803222251443

参考资料

HTTP 2 是什么, 它真的能让页面打开更快么

什么是长连接和短连接?(长链接、短链接)什么时候使用长连接、短链接?

HTTP (原理 && 实践) HTTP2 优点

HTTP/2 没有强制要求 TLS

小林coding - HTTP/2牛逼在哪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值