MST

星途 面试题库

面试题:网络编程中HTTP/2多路复用的实现细节

描述在网络编程场景下,HTTP/2协议多路复用技术如何通过帧和流的机制来实现多个请求和响应的并行处理,以及如何管理流的优先级?
16.7万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

1. 帧和流的机制实现并行处理

  • 帧(Frame)
    • HTTP/2 协议将数据分割为更小的单元,即帧。每个帧都有特定的类型,如 HEADERS 帧用于传输请求头或响应头,DATA 帧用于传输请求体或响应体。
    • 不同类型的帧在客户端和服务器之间进行双向传输。例如,客户端可以发送 HEADERS 帧发起请求,紧接着发送 DATA 帧传输请求体;服务器收到后,以同样方式返回 HEADERS 帧和 DATA 帧。
    • 这些帧在连接上交错传输,不再像 HTTP/1.1 那样需要按顺序逐个处理请求和响应,从而实现了并行性。
  • 流(Stream)
    • 流是一个独立的、双向的帧序列,用于在客户端和服务器之间传输特定的请求和响应。每个流都有唯一的标识符(Stream ID)。
    • 多个流可以在同一个 TCP 连接上同时存在并并行传输。例如,客户端可以同时发起多个请求,每个请求对应一个不同的流 ID,服务器也能通过流 ID 准确区分并处理不同的请求,然后通过相应的流返回响应。这样,多个请求和响应就可以在同一连接上并行处理,大大提高了传输效率。

2. 流的优先级管理

  • 优先级标识
    • 在 HTTP/2 中,每个流都可以被赋予一个优先级。优先级通过 HEADERS 帧中的特定字段来表示,包括权重(一个介于 1 到 256 之间的数字)和依赖关系。
    • 权重越高,该流在资源分配时会得到更多的优先级。例如,对于关键资源(如网页的关键 CSS 和 JavaScript 文件)的请求流,可以设置较高的权重,使其在网络拥塞等情况下优先得到处理。
  • 依赖关系
    • 流之间还可以定义依赖关系。例如,流 A 可以依赖于流 B。这意味着在处理流 A 之前,必须先处理完流 B。通过这种依赖关系,可以确保资源的加载顺序符合逻辑,比如先加载基础的样式表,再加载依赖于该样式表的特定页面样式。
    • 依赖关系也可以是间接的,形成一个优先级树结构。HTTP/2 实现会根据这些权重和依赖关系,动态地分配网络资源,优先处理高优先级的流,从而优化整体的传输性能。