我可以在没有 ALPN 支持的情况下实现 http/2 服务器吗?
Posted
技术标签:
【中文标题】我可以在没有 ALPN 支持的情况下实现 http/2 服务器吗?【英文标题】:Can I implements http/2 server without ALPN support? 【发布时间】:2015-11-14 21:51:49 【问题描述】:这样客户端可以不用ALPN连接服务器,默认使用http/2。
这可能吗?
【问题讨论】:
【参考方案1】:是的,有可能,但条件很严格。
到目前为止,浏览器还没有为 HTTP/2 实现明文通信,因此如果您使用浏览器,您的问题的答案是否定的:如果您希望浏览器成为支持 ALPN 的服务器,则必须部署您的服务器可以连接。
另一方面,其他客户端(例如 Java 客户端)可能能够使用明文 HTTP/2 连接到服务器,因此对于这些类型的客户端,您的问题的答案是肯定的:您可以部署 HTTP/ 2 台不支持 ALPN 的服务器。
Jetty Project [免责声明,我是提交者] 实现了支持这两种方案的 Web 服务器和 servlet 容器:您可以为 TLS (SSL) HTTP/2 通信启用 ALPN,以便浏览器能够连接,并且您还可以使用explained here 启用明文 HTTP/2 通信。另请参阅Jetty HTTP/2 documentation。
【讨论】:
不完全是问的,但很多服务器也接受 NPN 而不是 ALPN...=) @sbordet,是否可以直接通过 TLS 连接运行带有 http/2 的服务器?这样客户端可以在没有 ALPN 的情况下连接到服务器并使用 http/2 默认值? 这只有在客户端事先知道服务器在您连接的端口上接受 HTTP/2 over TLS 时才有可能。服务器可以发送“Alt-Svc”标头来告诉客户端它们支持什么端口/协议,并且实现 Alt-Svc 的客户端将能够使用 HTTP/2 over TLS 进行连接,而无需 ALPN。 @sbordet 因此,如果我的服务器将发送 Alt-Svc 标头,Chrome 客户端是否能够在没有 ALPN 的情况下通过 TLS 使用 HTTP/2?其他浏览器也会这样做吗?以上是关于我可以在没有 ALPN 支持的情况下实现 http/2 服务器吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何为无 ALPN 客户端配置 Nginx 仅支持 HTTP2