如果HTTP/1.1客户端与仅HTTP/2服务器通信以及如果HTTP/2客户端与仅HTTP/1.1服务器通信怎么办?

use*_*927 8 http-1.1 http2

HTTP/2肯定是未来的趋势,因为它现在是HTTP协议的标准.我们可以在使用中看到,70.15%的浏览器支持HTTP/2.但HTTP/2是如此新颖,以至于只有支持HTTP/1.x的浏览器,并且有许多服务器只支持HTTP/1.x. 我知道客户端可以使用HTTP升级机制来协商正确的协议以与服务器通信.例如,如果服务器支持HTTP/2,则它们的通信协议将切换到HTTP/2,否则使用HTTP/1.x. 但这仅适用于客户端使用的浏览器同时支持HTTP/2和HTTP/1.x的情况,对吗?

但是,如果浏览器上仅支持HTTP/1.x的用户想要与仅HTTP/2服务器通信呢?服务器是否会忽略该请求或将错误发送回用户?

如果只支持HTTP/2的浏览器上的用户想要与仅HTTP/1.1服务器通信呢?我认为这个过程可能是这样的:用户向服务器发送连接前言,服务器无法识别请求,因此用户可能会收到连接错误消息.这是正确的吗?

或者是否有任何浏览器仅支持HTTP/2?

Ole*_*leg 15

重要的是要考虑到HTTP/2的大多数实现使用它通过具有ALPN协议(应用层协议协商)的TLS 1.2.因此,客户端只需启动标准TLS连接.作为此类通信的一部分,客户端向服务器发送"Client Hello"并提供一些信息:

在此输入图像描述

这就像是:"嗨,汤姆!这是鲍勃.我说德语,俄语和英语.让我们聊聊一下".并且服务器发送"Server Hello":

在此输入图像描述

"嗨,鲍勃!我建议说德语或英语".然后客户端发送一条短消息"OK,然后让我们说德语",他开始说德语而不等待服务器的任何响应:

在此输入图像描述

整个通信如下图所示

在此输入图像描述

因为客户端和服务器都只使用TLS 1.2启动通信,这两者都知道.他们在协议协商后开始主要通信.因此,您描述的问题在实践中可能不存在.


sbo*_*det 5

如果浏览器仅支持HTTP/1.1且服务器仅支持HTTP/2,则它们无法通信.服务器无法识别客户端发送的内容(特别是没有连接前言,服务器会按照规范处理 - 作为连接错误),并将关闭连接.

"不支持HTTP/2的浏览器"不存在; 如果它们支持HTTP/2,它们也支持HTTP/1.1.但是我们假设存在这样的浏览器.

在后一种情况下,服务器将看到连接前言,并且不会识别该PRI方法.在这种情况下,服务器究竟做了什么取决于服务器.它可能返回一个400 Bad Request,或者可能只是关闭连接,或者它可能触发内部服务器错误.