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

  • 二进制协议:

    • 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 的优先级,让优先级高的流先发送 来满足需求

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

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

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

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

  • 不足之处:

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

【注1】

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

相关推荐
星融元asterfusion21 分钟前
工业网络升级实战:100G 双轨 Leaf-Spine 架构破解高并发出货网络瓶颈
网络·架构·spine
Da Da 泓25 分钟前
五子棋 Web 端测试用例报告
前端·网络·websocket·网络协议·测试用例·项目
云和数据.ChenGuang1 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
ESDWAN2 小时前
企业网络监控应该监测哪些目标?网关、网络节点还是业务系统?
服务器·网络·php
mennekes2 小时前
临时用电线路标识:插头颜色、钟面标识配套规范
运维·网络·科技·安全·制造
发光小北3 小时前
EtherNet/IP 转 ModbusTCP 网关现场应用中会遇到什么问题?
服务器·网络·tcp/ip
海宇大数据3 小时前
零信任架构实战:基于海宇全能小微企业报告构建自动化持牌网络小贷小微商户极速助业贷秒级全维风险决策网关
网络·人工智能·架构·自动化
tongyiixiaohuang4 小时前
供应商主数据同步实战:从易快报到金蝶云星空的单一策略落地
java·网络·数据库
一只鹿鹿鹿5 小时前
智算算力、AI-芯片与产品解析(PPT文件)
大数据·运维·网络·人工智能·物联网·1024程序员节
开源必胜5 小时前
Socket、异步非阻塞 I/O 与 NGINX、Netty 模型
网络·tcp/ip·nginx