首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果HTTP/1.1客户端只与HTTP/2服务器对话,如果HTTP/2客户端只与HTTP/1.1服务器对话,怎么办?

如果HTTP/1.1客户端只与HTTP/2服务器对话,如果HTTP/2客户端只与HTTP/1.1服务器对话,怎么办?
EN

Stack Overflow用户
提问于 2016-04-08 12:52:43
回答 3查看 10.8K关注 0票数 10

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的浏览器?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-08 13:51:36

如果浏览器只支持HTTP/1.1,而服务器只支持HTTP/2,则它们无法通信。服务器将不识别客户端发送的内容(特别是不存在连接序言,服务器将其视为连接错误--遵循规范),并将关闭连接。

“只支持HTTP/2的浏览器”不存在;如果它们支持HTTP/2,它们也支持HTTP/1.1。但让我们假设存在这样的浏览器。

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

票数 9
EN

Stack Overflow用户

发布于 2016-04-08 17:33:23

考虑到HTTP/2的大多数实现在TLS 1.2上使用ALPN协议(应用层协议协商),这一点很重要。因此,客户机只是启动标准的TLS连接。作为这种通信的一部分,客户端向服务器发送"Client“,并提供一些信息:

就像:“嗨,汤姆!我是鲍勃。我会说德语、俄语和英语。让我们谈谈吧。”服务器发送"Server“:

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

下面的图片显示了整个通信过程

因为客户机和服务器都使用TLS 1.2启动通信,这一点大家都知道。它们在协议协商之后启动主通信。因此,你所描述的问题在实践中不可能存在。

票数 25
EN

Stack Overflow用户

发布于 2018-08-21 16:46:16

我试着用http2访问curl --http1.1 -i的服务器,下面是我得到的

代码语言:javascript
复制
HTTP/1.0 403 Forbidden
Content-Type: text/plain

Unknown ALPN Protocol, expected `h2` to be available.
If this is a HTTP request: The server was not configured with the `allowHTTP1` option or a listener for the `unknownProtocol` event.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36500050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档