使用 HTTP 1.1 的服务器如何理解使用 HTTP 2 的客户端?

问题描述 投票:0回答:1

我很困惑,因为它看起来对我来说不同的来源说不同的事情,我真的不明白它:

“层”是指在套接字接口和暴露给我们的应用程序的更高层 HTTP API 之间引入新的优化编码机制的设计选择:HTTP 语义,例如动词、方法和标头,不受影响,但方式它们在运输过程中被编码,这就是不同之处。与换行符分隔的纯文本 HTTP/1.x 协议不同,所有 HTTP/2 通信都分为更小的消息和帧,每个消息和帧都以二进制格式编码。 因此,客户端和服务器都必须使用新的二进制编码机制来相互理解:HTTP/1.x 客户端无法理解仅 HTTP/2 的服务器,反之亦然。

支持 HTTP/2 的客户端可以向服务器发送 HTTP/2 请求。但是,如果服务器仅支持 HTTP/1.1 并且不理解 HTTP/2,它将使用 HTTP/1.1 响应进行响应。当客户端尝试对尚未采用较新的 HTTP/2 协议的服务器使用该协议时,可能会发生这种情况。

我了解到它们有不同的数据格式:HTTP 1.1 包含文本,而 HTTP 2 包含二进制数据。我尝试用谷歌搜索它,甚至尝试翻译它,因为英语不是我的母语。

我还发现了这个 如果 HTTP/1.1 客户端与仅 HTTP/2 服务器通信会怎样?如果 HTTP/2 客户端与仅 HTTP/1.1 服务器通信会怎样?

HTTP2 中还有用于标头压缩的帧和表

http protocols http2 network-protocols http-1.1
1个回答
0
投票

要事第一;

支持 HTTP/2 的客户端可以向服务器发送 HTTP/2 请求。但是,如果服务器仅支持 HTTP/1.1 并且不理解 HTTP/2,它将使用 HTTP/1.1 响应进行响应。当客户端尝试对尚未采用较新的 HTTP/2 协议的服务器使用该协议时,可能会发生这种情况。

这是有点错误,当仅HTTP/2的服务器收到HTTP/1.1请求时,因为它无法理解它,所以服务器端会出现错误,因此客户端可能无法解析响应,或者会出现根据服务器实现,没有响应。实际上,几乎所有服务器都支持这两种协议。这就是为什么引用的文本会这样说。这很令人困惑。

那句话应该是这样的;

“如果服务器仅支持 HTTP/1.1 并且不理解 HTTP/2,客户端将发送 HTTP/1.1 请求,服务器将以 HTTP/1.1 进行响应。如果客户端不支持 HTTP/1.1,客户端将抛出错误”

当 TLS 握手发生时,服务器发送 ALPN 协议,这是支持协议的字符串列表,对于大多数服务器来说它是 ["h2","http1.1"],然后客户端查看那里是否有支持的协议,按照服务器指定的顺序选择一个。因此,对于您的前端项目,您不需要指定有关 HTTP/2 或 HTTP/1.1 的任何内容,浏览器会自动处理该协议协商。

您链接的 stackoverflow 答案解释得非常好。

© www.soinside.com 2019 - 2024. All rights reserved.