HTTP 协议:在 curl 中调用 GET 请求方法后的 TLS/请求/响应分类

HTTP 协议:在 curl 中调用 GET 请求方法后的 TLS/请求/响应分类

首先,很抱歉给您带来不便。我不知道这里是不是合适的论坛,但我读过几个帖子,也有一些这方面的专家,所以也许他们中有人可以帮助我。

我正在为一所大学做研究。在这项研究中,我想指出当您对服务器使用 HTTP 请求方法 Get 时会发生什么。为此,我在 Ubuntu 终端中对 Web 域使用了 curl -v。

下面附上我建立的分类:

在此处输入图片描述

-蓝色框包含带有 ALPN 的 TLS 握手协议。

-绿色框中包含了客户端向服务器发送的请求信息,以及请求头字段。

-红色框内包含服务器发送给客户端的响应报文及头字段。

-最后一个盒子包括“有效载荷主体”。

我有两个问题:

  1. 绿色和红色框之间的那条线,上面写着“连接状态已更改(MAX_CONCURRENT_STREAMS 已更新)”,我应该把它放在哪个部分?在绿色部分,好像它是客户端发送给服务器的请求标头字段的一部分?还是应该用不同的颜色标出这条线?

  2. 除了“连接状态已更改 (MAX_CONCURRENT_STREAMS 已更新)”这一行之外,您是否同意我所做的分类?您认为其中存在错误吗?

非常感谢您帮助研究人员;)

如果措辞有误,请原谅。英语不是我的母语

答案1

首先回答第二个问题:看起来似乎合理。

问题 1:该消息与初始 curl 消息属于同一组。它记录了 curl 客户端的状态变化,而上面和下面的行显然是 HTTP 协议标头。

答案2

HTTP/2(以及即将发布的 HTTP/3)现在存在于两个不同的层:

  1. 语义层 - 被认为是典型的 HTTP,使用诸如GETHTTP 标头和正文之类的方法。
  2. 二进制框架层将这些 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 协议的一部分。

相关内容