我捕获了 HTTP/2 fetching https://example.com。捕获的初始行上的三个条目是:
HyperText Transfer Protocol 2
Stream: Magic
Stream: SETTINGS, Stream ID: 0, Length 18
Stream: WINDOW_UPDATE, Stream ID: 0, Length 4
Run Code Online (Sandbox Code Playgroud)
我应该如何参考这些?我可以说它们是来自stream 0和的三个初始帧吗Magic,SETTINGS和WINDOW_UPDATE帧?
Magic 不是一个帧,而是一组特殊的字节,类似于 HTTP/1.1 消息。它在所有 HTTP/2 连接开始时发送,以允许 HTTP/1.1 服务器通过 HTTP/1.1 响应优雅地拒绝连接,以便客户端知道恢复到 HTTP/1.1。它的正式名称是Connection Preface,但通常被称为“Magic”消息。顺便说一句,它有一段有趣的历史。
您可以看到 Magic 消息不是帧,因为它没有流 ID,也没有任何其他必要的帧头来定义帧。
SETTINGS 和 WINDOW_UPDATE 消息确实是帧,HTTP/2 规范中定义了几种帧类型,并且在扩展中添加了更多帧类型。