9、HTTP/2与HTTP/1.1的区别?【高频】

server/2025/3/1 6:47:30/
http://www.w3.org/2000/svg" style="display: none;">
  • 二进制协议

    • HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式,报文头部和数据体都是二进制,并且统称为帧(frame):头信息帧(Headers Frame)和数据帧(Data Frame),从而提高效率
  • 头部压缩

    • HTTP/2 会压缩头部(Header):多个请求的头部是相似的或一样的,那么,协议会消除重复的部分。

    • 具体手段就是 HPACK 算法: 通过 静态表、动态表和 Huffman 编码 ,用索引号来代替对应的字段

      (不过,动态表并非可以无限增大, 因为动态表是会占用内存的,动态表越大,内存也越大,容易影响服务器总体的并发能力,因此 服务器需要限制 HTTP/2 连接时长或者请求次数。)

  • HTTP/2 实现数据的并发传输

    • HTTP/1.1并不是默认支持管道化,第一个请求发出去之后,需要接收到响应之后,才能发送第二个请求。

    • 而 HTTP/2 引入了 Stream ,也就是流。同一个HTTP的请求以及对应的响应 在一个流中。由于一个TCP连接可以同时并发运行多个流,从而实现了数据的并发传输,也节约了TCP连接建立的时间

      • 同一个流中的帧必须是有序的,因为它们要按顺序组成一个完整的请求或响应报文

      • 不同流中的帧之间并没有联系,所以可以乱序发送。

      • 也可以设置 Stream 的优先级,让优先级高的流先发送 来满足需求

      https://i-blog.csdnimg.cn/img_convert/06e86be9d0f7372c9da01188b6b4a383.png" alt="img" />

    https://i-blog.csdnimg.cn/img_convert/7925a6310474fac6b160349f3261dd77.jpeg" alt="img" />

  • HTTP/2的服务器 可以主动发送数据

    • 原因在于客户端和服务器双方都可以建立 Stream,来接收和发送数据

    • 服务器推送资源时,会先发送 PUSH_PROMISE 帧,告诉客户端接下来在哪个 Stream 发送资源

    • 然后用偶数号 Stream 发送资源给客户端,从而大大提升了消息的传输性能(Stream ID 也是有区别的,客户端建立的 Stream 必须是奇数号,而服务器建立的 Stream 必须是偶数号)

      https://i-blog.csdnimg.cn/img_convert/d256d5e454539e5d5973116338e214a8.png" alt="img" />

  • 不足之处:

    • 虽然HTTP/2 通过 Stream 的并发能力,解决了 HTTP/1 队头阻塞的问题,但是由于TCP的特征,依然会存在阻塞【注1】

【注1】

HTTP/2 是基于 TCP 协议来传输数据的,TCP 是字节流协议,TCP 层必须保证收到的字节数据是完整、连续的当「前 1 个字节数据」没有到达时,后收到的字节数据只能存放在内核缓冲区里,只有等到这 1 个字节数据到达时,这些数据才会作为一个整体发送给应用层,这就是 HTTP/2 队头阻塞问题。


http://www.ppmy.cn/server/171488.html

相关文章

使用write函数

使用open命令打开文件后,要往里面写入数据,使用write命令,把buf中count字节的数据写入fd中 关键是,写文件的时候要在这个文件的哪一个位置去写 假如写得时候,文件为空,指针指向最开始的位置,执…

001 Kafka入门及安装

Kafka入门及安装 文章目录 Kafka入门及安装1.介绍Kafka的基本概念和核心组件 2.安装1.docker快速安装zookeeper安装kafka安装 添加topic删除topickafka-ui安装 2.Docker安装(SASL/PLAIN认证配置-用户名密码) 来源参考的deepseek,如有侵权联系…

数字人技术再超越,TANGO 可生成与音频匹配的全身手势视频

TANGO 是由东京大学与 CyberAgent AI Lab 于 2024 年共同研发的开源框架,专注于声音驱动的全身数字人生成。该技术能够根据目标语音音频生成与之同步的全身手势视频,突破了传统数字人技术仅支持面部或上半身动作的局限性。TANGO 的工作原理利用隐式分层音…

Debian安装C语言环境

参考链接 gcc:https://my.oschina.net/emacs_8766486/blog/17213484 make:https://blog.csdn.net/m0_48096446/article/details/139989347 gdb:https://blog.csdn.net/kaixian2003/article/details/114642610 gcc 确保系统包列表是最新的…

力扣hot100刷题——11~20

文章目录 11.滑动窗口最大值题目描述思路:滑动窗口单调队列code 12.最小覆盖子串题目描述思路:双指针/滑动窗口哈希code Ⅰcode Ⅱ 13.最大子数组和题目描述思路:dp/贪心code 14.合并区间题目描述思路:贪心code 15.轮转数组题目描…

rust学习~tokio的io

await Suspend execution until the result of a Future is ready. 暂停执行,直到一个 Future 的结果就绪。 .awaiting a future will suspend the current function’s execution until the executor has run the future to completion. 对一个 Future 使用 .awa…

【大模型实战篇】DeepSeek-R1面临的DDOS攻击以及与O系列的差距

1. 问题 虽然不可否认DeepSeek-R1作为一款大模型表现出色,其开源也推动了技术的进步。然而,在这份热闹的背后,我们仍需保持冷静。该推理模型在某些特殊场景下存在问题:其think过程可能会持续不断地输出,直到达到token…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_list_t

ngx_list_t 定义在 src/core/ngx_list.h typedef struct {ngx_list_part_t *last;ngx_list_part_t part;size_t size;ngx_uint_t nalloc;ngx_pool_t *pool; } ngx_list_t;ngx_list_t 是 Nginx 中用于管理动态数组链表的核心数据结构,结…