• 网络学习(15)|有http/1为什么还会有http/2


    HTTP/1(具体来说是HTTP/1.1)在互联网的早期阶段是非常成功的,它标准化了客户端和服务器之间的请求-响应模型,使得Web能够迅速扩展和普及。然而,随着Web的复杂性和流量的增加,HTTP/1.1的一些设计上的局限性开始显现,导致了性能瓶颈和效率问题。这些问题主要体现在以下几个方面:

    1. 串行阻塞(Head-of-line blocking):
      在HTTP/1.1中,一个TCP连接同一时间只能处理一个请求。如果一个请求需要较长时间来响应,那么后续的请求就必须等待,即使服务器有空闲的资源也无法处理这些等待中的请求。这被称为串行阻塞。
    2. 连接管理开销:
      由于HTTP/1.1的每个请求都需要建立和维护一个TCP连接,这导致了大量的连接管理开销。虽然引入了持续连接(keep-alive)机制来重用连接,但这仍然不能完全避免连接管理带来的性能损耗。
    3. 过度的往返延迟:
      每个请求和响应都需要至少一次完整的往返时间(Round Trip Time, RTT),这对于远距离的请求特别不利,因为RTT会显著增加。
    4. 不必要的数据传输:
      HTTP/1.1的报文头部通常是纯文本,这导致了不必要的带宽消耗,尤其是当重复的头部信息被频繁发送时。

    为了解决这些问题,HTTP/2协议应运而生。HTTP/2的主要改进包括:

    1. 多路复用(Multiplexing):
      HTTP/2允许在同一个TCP连接上同时处理多个请求,从而消除了串行阻塞的问题。这意味着一个连接可以同时处理多个请求和响应,提高了效率。
    2. 二进制分帧:
      HTTP/2将请求和响应数据分割成更小的二进制帧,这减少了数据传输的开销,并且使得错误检测和恢复更加高效。
    3. 头部压缩(HPACK):
      HTTP/2使用HPACK算法来压缩报文头部,减少因重复发送头部信息而导致的带宽浪费。
    4. 优先级和流控制:
      HTTP/2引入了优先级和流控制机制,允许客户端和服务器指定请求的优先级,并且控制数据流的速度,以防止过载。
    5. 服务器推送(Server Push):
      HTTP/2允许服务器主动向客户端推送资源,而无需等待客户端显式请求,这可以减少延迟并提高性能。

    综上所述,HTTP/2通过引入一系列底层的传输优化,极大地改善了Web应用的性能,尤其是在高延迟和多资源加载的场景下。因此,HTTP/2逐渐成为现代Web应用的首选协议。

  • 相关阅读:
    C++ 数据结构--二叉搜索树的实现
    《第一行代码Andorid》阅读笔记-第六章
    【解决方案】Java 互联网项目中消息通知系统的设计与实现(上)
    【Vim】模式的切换、常用命令总结
    穿越两大空间的调用栈
    My Fortieth Page - 二叉搜索树中的众树 - By Nicolas
    Debian12通过Docker安装mariadb数据库(mysql可参考)
    C++:多态及虚函数
    寒假训练——第三周(背包DP)
    在云服务器上搭建个人版chatGPT及后端Spring Boot集成chat GPT
  • 原文地址:https://blog.csdn.net/weixin_44435110/article/details/139636580