HTTP版本

HTTP/1.0

最早的http只是使用一些简单的网页上和网络请求上,每次请求都打开一个新的TCP连接,收到响应后立即断开连接

HTTP/1.1

  • 缓存处理,HTTP/1.1 更多的引入了缓存策略,如Cache-Control,Entity tag,If-Unmodified-Since, If-Match, If-None-Match等
  • 宽带优化及网络连接的使用,在HTTP/1.0中,存在一些浪费宽带的现象,列如客户端只需要某个对象的一部分,而服务器把整个对象都送过来了,并且不支持断点续传,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
  • 错误通知的管理,在HTTP/1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
  • Host头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)
  • 长连接, HTTP/1.1 默认开启持久连接(默认:keep-alive),在一个TCP连接上可以传递多个HTTP请求和响应,减少了建立与关闭连接的消耗和延迟

HTTP/2.0

在HTTP/2.0中,有两个重要的概念,分别是帧(frame) 和 流(stream),帧代表数据传输的最小单位,每个帧都有序列标识标明该帧属于哪个流,流也就是多个帧组成的数据流,每个流表示一个请求。

  • 新的二进制格式: HTTP/1.x 的解析是基于文本的。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
  • 多路复用: HTTP/2.0支持多路复用,这是HTTP/1.1持久连接的升级版。多路复用,就是在一个TCP连接中存在多个条流,也就是多个请求,服务器则可以通过帧中的标识知道该帧属于哪个流(即请求),通过重新排序还原请求。多路复用允许并发多个请求,每个请求及该请求的响应不需要等待其他的请求或响应,避免了线头阻塞问题。这样某个请求任务耗时严重,不会影响到其它连接的正常执行,极大的提高传输性能。
  • 头部压缩: 对前面提到的HTTP/1.x的header带有大量信息,而且每次都要重复发送,HTTP/2.0使用encoder来减少需要传输的头部大小,通讯双方各自cache一份头部 fields表,既避免了重复头部的传输,又减小了需要传输的大小。
  • 服务端推送: 服务端推送指把客户端所需要的css/js/img资源伴随着index.html 一起发送到客户端,省去了客户端重复请求的步骤(从缓存中取)。正因为没有发起请求,建立连接等操作,所以静态资源通过服务端推送的方式极大的提升了速度

HTTP/3.0

HTTP/2.0使用了多路复用,一般来说同一域名下只需要使用一个TCP连接。但当这个连接中出现了丢包的情况,会导致整个TCP都要开始等待重传,也就导致了后面所有的数据都阻塞了。

  • 避免包阻塞: 多个流的数据包在TCP连接上传输时,若一个流中的数据包传输出现问题,TCP需要等待该包重传后,才能继续传输其它流的数据包。但在基于UDPQUIC协议中,不同的流之间的数据传输真正实现了相互独立互不干扰,某个流的数据包在出问题需要重传时,并不会对其他流的数据包传输产生影响。
  • 快速重启会话: 普通基于tcp的连接,是基于两端的ip和端口和协议来建立的。在网络切换场景,例如手机端切换了无线网,使用4G网络,会改变本身的ip,这就导致tcp连接必须重新创建。而QUIC协议使用特有的UUID来标记每一次连接,在网络环境发生变化的时候,只要UUID不变,就能不需要握手,继续传输数据。

HTTP2.0的多路复用和HTTP1.X中的长连接有什么区别?

  • HTTP/1.* 一次请求-响应,建立一个连接,用完关闭;每一个请求都要建立一个连接;
  • HTTP/1.1 在一个TCP连接上可以传递多个HTTP请求和响应,后面的请求等待前面的请求返回才能获得执行机会,一旦有某个请求超时,后续请求只能被阻塞,毫无办法,也就是常说的线头阻塞
  • HTTP/2.0 多个请求可同时在一个连接上并行执行.某个请求任务耗时严重,不影响其他连接的正常执行;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值