首先,很抱歉给您带来不便。我不知道这里是不是合适的论坛,但我读过几个帖子,也有一些这方面的专家,所以也许他们中有人可以帮助我。
我正在为一所大学做研究。在这项研究中,我想指出当您对服务器使用 HTTP 请求方法 Get 时会发生什么。为此,我在 Ubuntu 终端中对 Web 域使用了 curl -v。
下面附上我建立的分类:
-蓝色框包含带有 ALPN 的 TLS 握手协议。
-绿色框中包含了客户端向服务器发送的请求信息,以及请求头字段。
-红色框内包含服务器发送给客户端的响应报文及头字段。
-最后一个盒子包括“有效载荷主体”。
我有两个问题:
绿色和红色框之间的那条线,上面写着“连接状态已更改(MAX_CONCURRENT_STREAMS 已更新)”,我应该把它放在哪个部分?在绿色部分,好像它是客户端发送给服务器的请求标头字段的一部分?还是应该用不同的颜色标出这条线?
除了“连接状态已更改 (MAX_CONCURRENT_STREAMS 已更新)”这一行之外,您是否同意我所做的分类?您认为其中存在错误吗?
非常感谢您帮助研究人员;)
如果措辞有误,请原谅。英语不是我的母语。
答案1
首先回答第二个问题:看起来似乎合理。
问题 1:该消息与初始 curl 消息属于同一组。它记录了 curl 客户端的状态变化,而上面和下面的行显然是 HTTP 协议标头。
答案2
HTTP/2(以及即将发布的 HTTP/3)现在存在于两个不同的层:
- 语义层 - 被认为是典型的 HTTP,使用诸如
GET
HTTP 标头和正文之类的方法。 - 二进制框架层将这些 HTTP 请求和响应分成数据包,并且还具有控制消息来定义如何发送消息,特别是因为您已经将 HTTP 协议分成各种不同的类别(请求发送、响应标头和响应正文)。
如果我们将绿色和红色部分视为 1 的一部分,那么该Connection state changed...
消息就是 2 的一部分。是否要将它们作为 HTTP 消息(客户端或服务器)的一部分包含在内取决于您,因为从技术上讲,它们是 HTTP/2 的一部分。就我个人而言,我可能会将它们归类为单独的控制消息。
此外,TLS 握手之后和第一个 GET 之前的一些消息可能属于同一类别 - 从开始的行开始Using HTTP/2, server...
直到开始的行Using Stream ID: 1...
。尽管 TLS 握手用于协商 HTTP/2(通过 ALPN 扩展),但这些消息是 TLS 握手之后发生的事情,与 TLS 握手无关。它们是 HTTP/2 协议的一部分,而不是 TLS 协议的一部分。