HTTP/1.x 缺陷

HTTP/1.x 实现简单是以牺牲性能为代价的:

  • 客户端需要使用多个连接才能实现并发和缩短延迟;
  • 不会压缩请求和响应首部,从而导致不必要的网络流量;
  • 不支持有效的资源优先级,致使底层 TCP 连接的利用率低下。

HTTP/2 新特性

  1. 二进制传输: HTTP/2 中所有加强性能的核心点在于此。在之前的 HTTP 版本中,我们是通过文本的方式传输数据。在 HTTP/2 中引入了新的编码机制,将报文分成 headers 帧和 data 帧,它们都是二进制格式的,所有传输的数据都会被分割,并采用二进制格式编码。

  2. 服务端 Push: 在 HTTP/2 中,服务端可以在客户端某个请求后,主动推送其他资源。这样就可以相对减少一点延迟时间。

  3. 首部压缩:在 HTTP/1 中,我们使用文本的形式传输 header,在 header 携带 cookie 的情况下,可能每次都需要重复传输几百到几千的字节。HTTP/2.0 要求客户端和服务器在两端维护了索引表,用于记录出现过的 header 从而避免了重复传输。不仅如此,HTTP/2.0 也使用 Huffman 编码对首部字段进行压缩。

  4. 多路复用: 在 HTTP/2 中,有两个非常重要的概念,分别是帧(frame)和流(stream)。帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。多路复用,就是在一个 TCP 连接中可以存在多条流。换句话说,也就是可以发送多个请求,可以避免 HTTP 旧版本中的队头阻塞问题,极大的提高传输性能。

多路复用很好的解决了浏览器限制同一个域名下的请求数量的问题,同时也接更容易实现全速传输,毕竟新开一个 TCP 连接都需要慢慢提升传输速度。

HTTP/1.x 与 HTTP/2 的关键区别

  1. 二进制协议代替文本协议,更加简洁高效
  2. 针对每个域只使用一个多路复用的连接
  3. 压缩头部信息减小开销
  4. 允许服务器主动推送应答到客户端的缓存中

总结

  • HTTP/2 通过多路复用、二进制流、Header 压缩等等技术,极大地提高了性能,但是还是存在着问题的
  • QUIC 基于 UDP 实现,是 HTTP/3 中的底层支撑协议,该协议基于 UDP,又取了 TCP 中的精华,实现了即快又可靠的协议

HTTP/2 Server Push

2022 年 6 月 Chrome 官方宣布在 chrome 103 版本对 HTTP 103 状态码提供了支持;

Chrome 官方也宣布在 chrome 106 版本对 HTTP/2 Server Push 进行禁用;

然后再引诱面试官问为什么要禁用 HTTP/2 Server Push;

队头阻塞了解吗?

先回答 HTTP 队头阻塞,是怎么产生的;

然后回答 HTTP2 怎么解决了 HTTP 队头阻塞;

并且抛出包袱 HTTP2 只解决了 HTTP 队头阻塞,根本的 TCP 队头阻塞还没有解决;

然后就可以聊一聊 HTTP3(Quic)相关的内容;

http2.0 新特性

  1. 二进制传输
  2. 多路复用
  3. Header 压缩
  4. 主动推送
Last Updated:
Contributors: yiliang114