vlambda博客
学习文章列表

http3相关以及http2是否应用迁移

1、HPACK算法是专门为压缩http头部定制的算法,与gzip等压缩算法不同,它是一个有状态的算法,需要客户端和服务器各自维护一份索引表,也就是字典,压缩和解压缩就是查表和更新表的操作

2、http/2废除了原有的起始行概念,把起始行里面的请求方法等统一转换成了头字段的形式,并且起了伪头字段,为了与真头字段区分开来,这些伪头字段会在名字前加一个:,比如:authority,:method等,现在的http报文头就简单了,全都是key-value形式的字段,随着http/2连接上发送的报文越来越多,两边的字典也会越来越丰富,最终每次的头部字段都会变成一两个字节的代码,原来上千字节的头用几十个字节就可以表示了,压缩效果比gzip要好得多。

3、头部数据压缩完成之后,http/2就要报报文拆成二进制帧准备发送,帧开头是3个字节的长度,长度后面的一个字节是帧类型,大致可以分成数据帧和控制帧

4、流是二进制帧的双向传输序列,在http/2连接上,虽然帧是乱序首发的,但只要他们都拥有相同的流ID,就都属于一个流,而且在这个流里帧是无序的,而是有着严格的先后顺序。以上是http/2的内容

5、怎么发现http3?这里就用到了http/2的扩展帧,浏览器需要先用http/2协议连接服务器,然后服务器可以启动http/2连接后发送一个alt-svc帧,包含一个h3=host:port的字符串,告诉浏览器在另外一个端点上提供等价的http/3服务,浏览器收到alt-svc帧,会使用quic异步连接指定的端口,如果连接成功,就会断开http/2连接,改用http/3收发数据

6、http/3基于quic协议,完全解决了队头阻塞的问题,弱网环境下的表现会优于http2

8、http/2的优点

      1、http/2最大的一个优点是完全保持了与http/1的兼容,在语义上没有任何变化,之前在http上的所有投入都不会浪费,而且是更安全的http、更快的https

      2、影响网络速度的两个关键因素是带宽和延迟,http/2的头部压缩、多路复用、流优先级、服务器推送等手段其实都是针对这两个要点,所谓的带宽就是网络的传输速度,从最早的56K/s到如今的100M/s,图片、视频这样的多媒体数据很容易会把带宽用尽。

      3、节约带宽的节本手段就是压缩,在http/1里只能压缩body,在http/2则可以用HPACK算法压缩header,这对高流量的网站非常的有价值,有数据表明能节省大概5%-10%的流量。

     4、与http/1并发多个连接不同,http/2的多路复用特性要求对一个域名或者IP只用一个TCP连接,所有的数据都在这一个连接上传输,这样不仅节约了客户端、服务器和网络的资源,还可以把带宽跑完,让TCP充分吃饱。

       这是为什么?

          在http/1里的长连接,虽然有双向通信,但任意一个时间点实际上还是单向的:上行请求时下行空闲,下行响应时上行空闲,再加上队头阻塞,实际上的带宽打了个对折还不止。

          而在http/2里,多路复用则让tcp开足了马力,全速狂奔,多个请求响应并发,每时每刻上下行方向上都有流在传输数据,没有空闲的时候,带宽的利用率能够接近100%。所以,http/2只使用一个连接,能抵上http/1里的五六个连接。不过流也可能会有依赖关系,可能会存在的等待导致的阻塞,这就是延迟。所以http/2的其他特性就派上了用场,优先级可以让客户端告诉服务器,哪个文件更重要,更需要优先传输,服务器就可以调高流的优先级,合理地分配优先的带宽资源,让高优先级的html、图片更快地客户端、尽早加载显示。

       服务器推送也是降低延迟的有效手段,它不需要客户端预先请求,服务器直接就发给客户端,这就省去了客户端解析html再请求的时间。

9、http/2缺点

         1、如果网络连接质量差,发生丢包,那么TCP会等待重传,传输速度就会降低

        3、http/2对一个域名只开一个连接,所以一旦这个连接出问题,那么整个网络的体验也就变差了

     

10、总结:http/2的侧重点是性能,所以是否迁移,就需要在这方面进行评估,如果网站的流量很大,那么http/2就可以带来可观的收益,反之,如果网站流量比较小,那么升级http/2就没有太多必要,只能利用现有的http再优化。

11、如果已经升级到了https,那么再升级到http/2会很简单

12、TLS协议提供ALPN扩展,让客户端和服务器协商使用的应用层协议,发现http/2服务