gpt4 book ai didi

HTTP/2 header 和数据帧

转载 作者:可可西里 更新时间:2023-11-01 15:26:53 25 4
gpt4 key购买 nike

我正在尝试详细了解 HTTP/2。我阅读了这篇关于流、消息和框架的文章:https://hpbn.co/http2/#streams-messages-and-frames .我不知道我的概念是否正确。

我得出以下结论:

  • 消息是 HEADER 框架和一个或多个 DATA 的组合帧。
  • DATA 帧只能与 HEADERS 帧一起发送,因为我没有看到任何显示 DATA 帧流 ID 的指示器(RFC 7540、6.1)
    • 如果为真,数据帧只能在消息中发送
  • 一个 Stream 可以被分成许多 Frames,同时它可以通过它的 Stream ID 与一个 Stream 相关联

此外:消息在规范中是如何表示的?

最佳答案

你有几处不正确。

消息 是一个或两个HEADER 帧(携带 HTTP header )、零个或多个 DATA 帧和 的组合em>one 可选终端 HEADER 框架(携带 HTTP 尾部)。您可以查看 this section of RFC 7540 中的示例.100 Continue 响应有一种特殊情况,它可以以两个 HEADERS 而不是一个开始。下面我们可以忽略这种情况。

DATA确实有一个流 ID,因为所有帧共享 this section of RFC 7540 中定义的帧头.6.1节中描述的只是DATA帧的主体。

消息 是 HTTP/2 流的一半。消息表示 HTTP 请求或 HTTP 响应。

HTTP/2 流是请求消息和响应消息的组合。请注意,不要将这与 flag_end_stream 混淆,后者表示任一对等端为该特定流发送的最后一帧。

浏览器执行的典型 GET 请求将具有(假设流 ID 为 13):

  • 一个 ID=13、flag_end_headers=trueflag_end_stream=trueHEADERS 帧(GET 请求通常没有 body )

对该 GET 请求的典型响应将包含:

  • 一个 ID=13 且 flag_end_headers=trueHEADERS
  • 一个或多个DATA帧,所有ID=13;最后一个 DATA 帧将有 flag_end_stream=true

请注意,由于多路复用,帧可以交错;这意味着如果您有两个并发响应(比如流 13 和流 15),例如,您可以有这个序列:

header (13) header (15) 数据(15) 数据(13) 数据(13) 数据(15) 数据(15]

方括号 ] 表示它是流中的最后一帧。

关于HTTP/2 header 和数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44460062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com