http1.0 http1.1 http2.0 http3.0

http1.0

浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态)。

http1.1

1.持久连接

TCP连接默认不关闭

2.管道机制

同一个TCP连接里面,客户端可以同时发送多个请求。

HTTP/1.0一次只允许在一个TCP连接上发起一个请求,而且连接无法复用

HTTP/1.1使用的管道化技术也只能部分处理请求并发,仍然会存在队列头阻塞问题

3.增加缓存处理(新的字段如cache-control

4.支持断点传输

服务端每产生一块数据,就发送一块

5.新增了一些请求方式

PUT、DELETE、HEAD等

主要缺点

1.队列头阻塞

2.单向请求

3.请求报文与响应报文首部信息冗余量大

4.数据未压缩

http2.0

1.二进制分帧

在应用层和传输层之间添加了一个二进制分祯层,会把消息分为更小的消息和祯,并且采用二进制格式编码

一般是流、消息、祯

http2.0的报文头部和数据都采用二进制格式而非文本格式,能够提高解析效率、减少解析错误。

2.多路复用(或连接共享)

基于二进制分祯层,所有的HTTP2.0通信都在一个TCP连接上完成,这个连接可以承载任意数量的双向数据流,真正实现了并行传输

HTTP1.1发送多个请求会出现串行问题,一个请求完成之后再进行下一个请求的发送

如果队首的请求因为处理的太慢耽误了时间,那么队列里后面的所有请求也不得不跟着一起等待,结果就是其他的请求承担了不应有的时间成本。

HTTP2.0中,基于二进制分帧层,HTTP2.0可以在共享TCP连接的基础上同时发送请求和响应。HTTP消息被分解为独立的帧,而不破坏消息本身的语义,交错发出去,在另一端根据流标识符和首部将他们重新组装起来。 

3.头部压缩

HTTP协议没有状态,所以必须通过报文头部储存,相同的头部信息可能反复携带;

HTTP2.0一方面对信息进行压缩,另一方面客户端和服务器同时维护一张头信息表,发送相同头部信息时只需要发送索引就行

4.服务器推送

服务器除了对最初请求的响应外,服务器还可以额外的向客户端推送资源,而无需客户端明确的请求。

例子:当浏览器请求一个网页时,服务器将会发回HTML,在服务器开始发送JavaScript、图片和CSS前,服务器需要等待浏览器解析HTML和发送所有内嵌资源的请求。服务器推送服务通过“推送”那些它认为客户端将会需要的内容到客户端的缓存中,以此来避免往返的延迟。

主要缺点 

1.发送多个数据流时,如果其中一个数据流出现丢失问题,后面的数据流到了也不能处理

2.HTTP2.0必须使用Https,https也存在队头阻塞问题

http3.0

将基于 QUIC 协议的 HTTP (HTTP over QUIC)重命名为 HTTP3.0

而quic协议是使用udp实现的

1.减少了tcp三次握手时间,以及tls握手时间

2.QUIC 的传输单元是 Packet,加密单元也是 Packet,整个加密、传输、解密都基于 Packet,这样就能避免 TLS 的队头阻塞问题

3.QUIC 基于 UDP,UDP 的数据包在接收端没有处理顺序,即使中间丢失一个包,也不会阻塞整条连接,其他的资源会被正常处理。

4.优化了重传策略,重传包和原包的编号不同,降低后续重传计算的消耗

5.连接迁移,不再用tcp四元组确定一个连接,而是用一个64位随机数来确定这个连接

6.更合适的流量控制

1.减少握手时间
2.基于package数据传输,减少队头阻塞问题
3.一个数据包出现问题不会阻塞其他数据包的处理
4.优化重传机制
5.连续迁移机制
6.优化流量控制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天都在掉头发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值