今天查阅资料了解http/2和即将普及到http/3,好奇直接有什么差异,整理了下两者之间的差异,如下供参考:
http/2 特点
- 采用二进制格式传输数据.二进制在解析的时候更加高效.请求和响应之间采用帧.并且是二进制的编码.
- 在相同的域名下,所有通信都是单个连接上完成.可以承载任意数量的双向数据流.每一个数据流都是以消息的方式发送,每个消息又是由N个帧组成.错乱的帧顺序并不会影响传输,因为可以根据帧首部标识的流标识可以重组.
- 采用了多路复用技术,这样以来就解决了同一个域名访问下请求数量的限制.这样就提高了传输速度.
- 首部采取了压缩策略,这样提升了性能节省了资源消耗.请求一发送了所有的头部字段,第二个请求则只需要发送差异数据,这样可以减少冗余数据,降低开销.
- 使用了Server Push 技术,服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML 时再发送这些请求.
http/3 特点
- 可以说 QUIC 相比 HTTP2 最大的性能优势. http/2下,建立一个tcp连接需要三次握手,需要 3 个RTT,最少也需要两个.而QUIC实现了 0RTT 的安全握手.
- 多路复用.同一条 QUIC 连接上可以创建多个 stream,来发送多个 HTTP 请求,而QUIC是基于 UDP 的,一个连接上的多个 stream 之间没有依赖,丢了一个stream并不影响其他的流.从而不会造成tcp阻塞.
- 使用了加密和认证, TCP 协议头部没有经过任何加密和认证,所以在传输过程中很容易被中间网络设备篡改,注入和窃听.
- 向前纠错机制也是http/3中一大亮点.也就是说即便丢包的情况下,可以通过其他包的冗余数据直接组装而无需重传.当然这种情况是针对丢包数量少的情况下,当丢包严重的情况下还是需要重传来完成.
对比了以上的两个不同的优缺点,可见http/3是目前比较完美的解决方案.目前苹果设备Mac big sur 升级后, Safari 浏览器中可以设置来使用 http/3的功能.以及移动设备设计后的ios14,也可以在Safari设置里开启.
http/3有效的解决了访问dns过程中被串改和注入,及窃听的风险,建议大家可以尝试.
除此之外推荐其他设置工具,nscrypt-proxy 也不错的选择.