我捕获了HTTP / 2的抓包https://example.com
。捕获的第一行中的三个条目是:
HyperText Transfer Protocol 2
Stream: Magic
Stream: SETTINGS, Stream ID: 0, Length 18
Stream: WINDOW_UPDATE, Stream ID: 0, Length 4
我应该如何参考这些?我可以说它们是stream 0
的三个初始帧,并且是Magic
,SETTINGS
和WINDOW_UPDATE
的帧吗?
答案 0 :(得分:2)
魔术不是帧,而是一组特殊的字节,类似于HTTP / 1.1消息。它在所有HTTP / 2连接的开始处发送,以允许HTTP / 1.1服务器通过HTTP / 1.1响应优雅地拒绝该连接,因此客户端知道恢复为HTTP / 1.1。它的正式名称为Connection Preface,但通常称为“魔术”消息。除了it has an interesting history。
您可以看到Magic消息不是帧,因为它没有流ID,也没有其他任何必要的frame headers which define a frame。
SETTINGS和WINDOW_UPDATE消息的确是帧,并且有several frame types defined in the HTTP/2 spec,并且自扩展名以来已经添加了更多。