html1 2 3进化之旅

102 阅读4分钟

前端面试八股 http

http 1.0

特点

  1. 短连接:每个请求需独立建立和关闭TCP连接,意味着每获取一个资源(如图片、JS文件)都需要重新建立连接。
  2. 无状态:服务器不记录用户信息,需依赖Cookie等机制实现会话管理

不足

  • 资源浪费:频繁建立连接导致带宽和服务器资源消耗大

http1.0使用的是短连接,每个请求都需要重新握手建立TCP连接,导致资源请求延迟较高,效率低下,特别是在现代网页中,资源请求数量众多时问题尤为突出。

http 1.1

加入了持久连接和缓存机制

特点

  1. 长连接(Keep-Alive:默认复用TCP连接,减少握手次数,提升效率
  2. 管道化请求:支持流水线,允许在一个连接上连续发送多个请求,提高了性能。但响应仍需顺序处理(未解决队头阻塞)
  3. 功能扩展:
  • Host头:支持虚拟主机,同一IP可托管多个域名。
  • 断点续传:通过Range头实现部分资源请求(状态码206)。
  • 缓存控制:引入Cache-Control、ETag等精细缓存策略

不足

  1. 请求 / 响应头部(Header)未经压缩就发送,首部信息越多延迟越大。只能压缩 Body 的部分
  2. 服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,也就是队头阻塞
  3. 请求只能从客户端开始,服务器只能被动响应

大多数传统的 Web 应用仍然在使用 HTTP/1.1。

http 2.0

多路复用与性能的飞跃

特点

  1. 二进制协议:HTTP/2不再使用HTTP/1.x的纯文本传输,而改为二进制帧传输,进一步提高了传输效率。
  2. 多路复用:允许多个请求和响应在同一TCP连接上并行处理,解决了HTTP/1.1中的队头阻塞问题
  3. 头部压缩:通过HPACK算法对请求和响应头部进行压缩,减少了头部传输的开销
  4. 服务器推送:服务器可以在客户端请求之前主动推送资源(如CSS、JS),减少页面加载时间

不足

  • 并没有完全解决队头阻塞的问题。只不过问题不是在 HTTP 这一层面,而是在 TCP 这一层。 HTTP/2 是基于 TCP 协议来传输数据的,TCP 是字节流协议,TCP 层必须保证收到的字节数据是完整且连续的,这样内核才会将缓冲区里的数据返回给 HTTP 应用,那么当「前 1 个字节数据」没有到达时,后收到的字节数据只能存放在内核缓冲区里,只有等到这 1 个字节数据到达时,HTTP/2 应用层才能从内核中拿到数据,这就是 HTTP/2 队头阻塞问题。

HTTP/2非常适合资源复杂、依赖大量并行加载的现代网站,如单页应用、复杂的企业级系统和内容丰富的新闻媒体网站等。

http 3.0

基于UDP的QUIC协议

特点

  1. 基于QUIC协议:HTTP/3的最大特点是它不再基于TCP协议,而是使用了基于UDP的QUIC协议。QUIC提供了类似TCP的可靠传输机制(如丢包检测和重传),同时消除了TCP的固有问题,如队头阻塞。
  2. 多路复用且无队头阻塞:由于QUIC的独立数据流特性,即使某个数据包丢失,也不会影响其他流的数据传输,彻底避免了队头阻塞问题。
  3. 连接速度更快:QUIC协议在网络不稳定或延迟较高的环境下表现优异,减少了连接建立的时间,尤其适合移动网络。
  4. 加密默认开启:所有HTTP/3的通信都是加密的,提升了隐私和安全性。

区别

  1. 协议格式:HTTP/1 和 HTTP/1.1 是文本协议,HTTP/2 是二进制协议,HTTP/3 基于 QUIC 协议。
  2. 性能表现:HTTP/2 和 HTTP/3 在性能上有了巨大的提升,解决了 HTTP/1 和 HTTP/1.1 中的队头阻塞和连接建立开销大等问题。

总结

HTTP协议的演进本质是性能、安全、适应性的螺旋上升:

  1. 性能:短连接→长连接→多路复用→零延迟连接。
  2. 安全:明文→HTTPS→内置加密。
  3. 适应性:固定网络→移动网络→物联网(IoT