skype在网站上怎么做链接,网站设计报价方案,建设网站具体步骤,能制作网页的软件是文章目录 二进制帧HTTP/2 中的帧、消息和流1. 帧#xff08;Frame#xff09;2. 消息#xff08;Message#xff09;3. 流#xff08;Stream#xff09;总结示例#xff1a; 二进制帧结构1.帧头部结构2.帧负载数据 请求和响应多路复用 链接参考#xff1a;https://web.… 文章目录 二进制帧HTTP/2 中的帧、消息和流1. 帧Frame2. 消息Message3. 流Stream总结示例 二进制帧结构1.帧头部结构2.帧负载数据 请求和响应多路复用 链接参考https://web.dev/articles/performance-http2?hlzh-cn#binary_framing_layer 二进制帧
在HTTP2.0中引入了新的编码机制所有传输的数据都会被分割并采用二进制格式编码 HTTP/2 所有性能增强的核心是新的二进制分帧层它规定了 HTTP 消息的封装方式并在客户端和服务器之间传输。 为了保证HTTP不受影响那就需要在应用层HTTP2.0和传输层TCP or UDP之间增加一个二进制分帧层。在二进制分帧层上HTTP2.0会将所有传输的信息分为更小的消息和帧并采用二进制格式编码其中HTTP1.x的首部信息会被封装到Headers帧而Request Body则封装到Data帧。 在 HTTP/2 中所有通信都在一个 TCP 连接上进行并被分割成更小的二进制帧。这些帧按序列号发送和接收并在接收端重新组装成完整的消息。这一层的实现为 HTTP/2 带来了显著的性能改进。 所以http2和http1.1互相不理解但是应用无需感知这些变化客户端和服务器会帮我们执行所有底层的动作 HTTP/2 中的帧、消息和流
1. 帧Frame
定义和作用
定义帧是 HTTP/2 协议中的最小单位。所有的 HTTP/2 通信都通过帧进行。每个帧都包含一个固定长度的头部(标识所属于的stream流和一个可变长度的负载作用 帧是 HTTP/2 协议实现多路复用的基础通过帧的分割和重组能够在单个连接上并行传输多个请求和响应
特点
头部固定为 9 字节包含长度、类型、标志和流标识符等信息。负载可变长度具体内容根据帧的类型不同而有所变化。
常见类型
DATA 帧传输消息主体。HEADERS 帧传输头部信息。PRIORITY 帧设置流的优先级。RST_STREAM 帧重置流。SETTINGS 帧协商连接参数。PUSH_PROMISE 帧服务器推送资源。PING 帧检查连接的连通性。GOAWAY 帧通知对端即将关闭连接。WINDOW_UPDATE 帧进行流量控制。
2. 消息Message
定义和作用
定义消息是由一组帧组成的完整的逻辑请求或响应。在 HTTP/2 中消息通常包含一个 HEADERS 帧后跟一个或多个 DATA 帧一个完整的帧序列用来映射到逻辑的请求或者响应信息作用 HTTP 协议的基本单元用于传递客户端和服务器之间的请求和响应。通过将消息分割成多个帧HTTP/2 能够更有效地传输和管理数据
特点
组成HEADERS 帧 可选的多个 DATA 帧。逻辑完整性消息表示一个完整的 HTTP 请求或响应包含所有必要的头部和主体信息。
3. 流Stream
定义和作用
定义流是 HTTP/2 中的一个独立的、双向的字节流包含多个帧。每个流都有一个唯一的标识符用于区分同一连接上的不同流在一个建立连接内的双向字节流能承载一个或者多个消息(TCP连接中的一个虚拟通道可以承载双向的消息)作用流是 HTTP/2 实现多路复用的关键通过在一个连接上同时存在多个流可以并行处理多个请求和响应避免了 HTTP/1.1 的队头阻塞问题。
特点
双向性流可以在客户端和服务器之间双向传输数据(真正意义的全双工唯一标识符每个流都有一个唯一的 31 位标识符客户端和服务器使用奇偶数区分流的来源客户端创建的流为奇数服务器创建的流为偶数。优先级流可以设置优先级以优化资源分配和响应时间。
总结
所有通信都在一个TCP连接上进行该连接可以承载任意数量的双向流streams(一个流一次请求与响应)每个流都有一个唯一的标识符和可选的优先级信息用于承载双向消息每条消息是一个逻辑上的HTTP消息例如请求或响应由一个或多个帧组成帧是通信的最小单位承载特定类型的数据例如HTTP头部、消息负载等。来自不同流的帧可以交替发送并通过每个帧头部中的嵌入流ID标识符重新组装
示例
客户端发送请求客户端发送一个包含 HEADERS 帧和多个 DATA 帧的消息。消息被分割成多个帧并通过流 1 传输。服务器响应请求服务器通过流 1 发送一个包含 HEADERS 帧和多个 DATA 帧的消息作为响应。并行请求客户端可以通过流 3 和流 5 同时发送其他请求服务器可以通过相应的流进行响应。 二进制帧结构 帧的组成部分
帧头部9 字节帧负载数据可变长度
-----------------------------------------------
| Length (24) |
---------------------------------------------
| Type (8) | Flags (8) |
---------------------------------------------
|R| Stream Identifier (31) || Frame Payload |
-----------------------------------------------1.帧头部结构
帧头部固定为 9 字节由以下字段组成
长度Length3 字节, 表示帧负载数据的长度确保接收方能正确读取和处理帧数据。它的值范围是 0 到 16,3832^14 - 1类型Type1 字节表示帧的类型,接收方能够按照特定帧类型的规则处理该帧 常见帧类型 0x0DATA 帧0x1HEADERS 帧0x2PRIORITY 帧0x3RST_STREAM 帧0x4SETTINGS 帧0x5PUSH_PROMISE 帧0x6PING 帧0x7GOAWAY 帧0x8WINDOW_UPDATE 帧 标志Flags1 字节,表示该帧的一些特殊属性,提供附加信息,如是否是最后一个帧END_STREAM是否包含头部END_HEADERS是否包含优先级信息PRIORITY 常见标志位0x1END_STREAM表示这是流的最后一个帧。0x4END_HEADERS表示 HEADERS 帧的结束。0x20PRIORITY表示包含优先级信息。 流标识符Stream Identifier4 字节帧所属的流的唯一标识符,该帧所属的流以便接收方将帧数据归属到正确的流中。流标识符是一个 31 位的无符号整数最高位保留必须设置为 0。
2.帧负载数据
帧负载数据的长度和内容根据帧类型的不同而变化。以下是一些常见帧类型的负载数据示例 DATA 帧 负载数据实际传输的数据如 HTML 内容、二进制数据。特殊字段可能包含 PADDED 数据填充字节。 HEADERS 帧 负载数据包含头部字段的压缩表示使用 HPACK 算法。特殊字段可能包含 PRIORITY 信息和 PADDED 数据。 PRIORITY 帧 负载数据包含优先级信息如依赖的流标识符和权重。 SETTINGS 帧 负载数据包含连接的配置信息如最大帧大小、最大并发流数等。 PING 帧 负载数据包含一个 8 字节的不可变数据用于检测连接的连通性。 请求和响应多路复用
使用 HTTP/1.x 时如果客户端想要发出多个并行请求以提高性能则必须使用多个 TCP 连接。这是 HTTP/1.x 传送模型的直接结果该行为可确保每个连接一次只传送一个响应响应排队。更糟糕的是这也会导致队首阻塞(http1.x队头阻塞以及底层 TCP 连接的效率低下。
HTTP/2 中新的二进制分帧层消除了这些限制并实现了完整的请求和响应多路复用方法是允许客户端和服务器将 HTTP 消息分解为独立的帧交错发送然后在另一端重新组装这些帧。 该快照捕捉了同一连接内传输的多个数据流。客户端正在向服务器传输 DATA 帧流 5而服务器正在将交错的帧序列发送到客户端以便流 1 和流 3。因此正在传输三个并行流。
能够将 HTTP 消息分解为独立的帧交错这些帧然后在另一端重新组装这些帧是 HTTP/2 最重要的增强功能。事实上它在所有 Web 技术的整个堆栈中带来了众多性能优势的连锁效应使我们能够
并行交错地发送多个请求请求之间互不影响。并行交错地发送多个响应响应之间互不影响。使用一个连接并行发送多个请求和响应。消除不必要的延迟并提高可用网络容量的利用率从而缩短网页加载时间。在HTTP1.x中我们是通过文本的方式传输数据。基于文本的方式传输数据存在很多缺陷文本的表现形式有多样性因此要做到健壮性考虑的场景必然有很多但是二进制则不同只有0和1的组合因此选择了二进制传输实现方便且健壮。