HTTP2:如何表示支持? HTTP2 有 "Alternate-Protocol"吗?

标签 http2

所以我刚升级到支持HTTP2的nginx 1.9.5。

我用 listen http2 替换了所有 listen spdy,删除了 spdy_headers_comp 指令,还删除了 add_header Alternate-Protocol 443:npn- spdy/3;

然后我在 Firefox 中打开我的站点,打开网络监视器,瞧:版本:HTTP/2.0

但是 Firefox 如何知道我的站点支持 HTTP2?在尝试 HTTP1.1 之前,是否总是首先尝试通过 HTTP2 进行连接?

最佳答案

HTTP/2站点部署在 TLS 上.

浏览器使用名为 ALPN 的 TLS 扩展告诉服务器他们可以使用什么协议(protocol)。 浏览器始终发送此 TLS 扩展,并且始终包括 HTTP/2 和 HTTP/1.1(并且可能还包括旧的 SPDY 协议(protocol))。

服务器接收浏览器可以使用的协议(protocol)列表,如果服务器支持 HTTP/2(并且如果满足许多其他条件——特别是关于 TLS 协议(protocol)版本和密码套件),服务器决定与浏览器对话 HTTP/2,并将选择的协议(protocol)发送回浏览器,再次使用 ALPN 扩展。

如果服务器不支持 HTTP/2,那么它将通过 ALPN 扩展发送给浏览器它只能使用 HTTP/1.1。

如果服务器不支持 ALPN 扩展,则它不会将其发送到浏览器,浏览器将默认与该服务器通信 HTTP/1.1。

关于HTTP2:如何表示支持? HTTP2 有 "Alternate-Protocol"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32721969/

相关文章:

java - 如何在 Java8 项目中使用 Http Client API(自 Java 9 起)

nginx - 如何在 CentOS 7 上使用 yum 更新我的 Nginx

angular - 我们可以使用 HTTP 2 服务器推送存在于其他 CDN 中的 Assets 吗?

node.js - 使用 HTTP/2 从 chrome 到 node-http2 服务器时看到多个 TCP 连接

java - Tomcat 9.0.16 Java 11 HTTP/2

java - 如何在 Java 11 http 客户端中保持连接

java - 使用 jdk8 Conscrypt 为 http2 启用 ALPN

ios - 如何在 iOS 中验证 HTTP/2 连接池/重用?

django - HTTP2与Gunicorn

linux - 即使使用 APNs 的 http2 选项,curl 也将数据发布到 HTTP/1.1