![HTTPS 是否需要支持 HTTP/2 中定义的框架功能](https://linux22.com/image/1548602/HTTPS%20%E6%98%AF%E5%90%A6%E9%9C%80%E8%A6%81%E6%94%AF%E6%8C%81%20HTTP%2F2%20%E4%B8%AD%E5%AE%9A%E4%B9%89%E7%9A%84%E6%A1%86%E6%9E%B6%E5%8A%9F%E8%83%BD.png)
这是我最初的问题的后续问题HTTPS POST 请求内容部分中的 TLS 标头热处理良好
在最初的问题中,我展示了(在第二次捕获中)两个嵌入式设备之间的未加密 TLS 消息。“客户端”在一个帧中发送 HTTP 标头,在另一个帧中发送 HTTP 数据。充当服务器的嵌入式设备发送 400 响应。Steffen Ullrich 给出了答案。
如果我理解正确的话,在我随后阅读互联网信息时,我发现框架功能似乎是在 HTTP/2 中添加的,而不是 HTTP/1.x 的一部分。我还发现https://www.keycdn.com/blog/difference-between-http-and-https/ HTTPS 应该支持 HTTP/2 的框架功能。
我在这里要求验证该声明。即使在 HTTPS POST 请求中我们指定 HTTP/1.1,根据 HTTPS,嵌入式服务器是否需要支持框架功能?
嵌入式客户端使用基于 libcurl、openssl 的 Linux 基础。据我所知,嵌入式服务器基于 Boost 库。
答案1
HTTPS 应该支持 HTTP/2 的框架功能。
HTTPS 不提供 HTTP/2 的框架。HTTPS 只是 TLS 上的 HTTP。TLS 有自己的数据框架。HTTP/2 有另一种数据框架。WebSocket 也有数据框架。HTTP/1.x 没有框架等。
因此,对于不带 TLS 的 HTTP/2(大多数不支持),您只有 HTTP/2 框架。对于 TLS 上的 HTTP/2,您可以在 TLS 框架“内部”使用 HTTP/2 框架。对于 TLS 上的 HTTP/2 中的 WebSockets,您可以拥有 WebSockets 框架、HTTP/2 框架和 TLS 框架。所有这些框架都是相互独立的,即边界可以重叠。
帧只是某种单位。它可能作为显式消息边界暴露给应用程序,就像 WebSockets 的情况一样。但它也可能仅在协议内部使用,而不会暴露给应用程序,就像 HTTP/2 或 TLS 的情况一样。
即使在 HTTPS POST 请求中我们指定 HTTP/1.1,每个 HTTPS 是否都需要嵌入式服务器支持框架功能?
正如我之前所说:HTTP/1.x 将底层传输视为流,没有隐式消息边界。因此,它根本不关心底层 TLS 层中的帧。这意味着,例如,HTTP 标头可能位于一个 TLS 帧中,而 HTTP 主体位于下一个帧中。或者 HTTP 标头的 2 个字节可能位于一个 TLS 帧中,其余字节与主体一起位于下一个帧中。或者 HTTP 消息的每个字节可能位于不同的 TLS 帧中。