来自具有早期 SSL 终止的浏览器的 HTTP2

Posted

技术标签:

【中文标题】来自具有早期 SSL 终止的浏览器的 HTTP2【英文标题】:HTTP2 from the browser with early SSL termination 【发布时间】:2018-04-20 11:57:46 【问题描述】:

我想设置我的网页以向 Jetty API 服务器发出 HTTP2 请求。我读到浏览器只会使用“h2”协议,即带有 TLS 的 HTTP2。但是,我的设置有一个 kubernetes 入口执行 SSL 终止,并将明文请求代理回 Jetty 服务器。困境是我不认为我想使用 Jetty 协商“h2”连接,因为这需要该服务器上的 SSL 上下文。

我的问题是,此设置是否允许浏览器执行 HTTP2 请求?如果是这样,我需要在 Jetty 服务器上启用什么才能正确处理 HTTP2 请求?

【问题讨论】:

通过右击谷歌浏览器网络请求表的列标题,可以添加一个“协议”列,表示我的API请求已经在h2上进行了!我相信这是由 kubernetes 入口负载均衡器提供的。 【参考方案1】:

您可以将 Jetty 配置为提供明文 HTTP/2(也称为 h2c),这样您的设置将是:

browser -- h2 --> kubernetes tls termination -- h2c --> Jetty

要使用明文 HTTP/2 设置 Jetty,如果您将 Jetty 用作独立服务器,则只需启用 http2c 模块,请参阅http://www.eclipse.org/jetty/documentation/current/http2-enabling.html

或者,如果您使用 Jetty 嵌入式,您可以查看 this example。

【讨论】:

以上是关于来自具有早期 SSL 终止的浏览器的 HTTP2的主要内容,如果未能解决你的问题,请参考以下文章

具有SSL终止的Apache前向代理

终止大量 SSL 连接具有成本效益

启用 HTTP2 服务器推送 Nginx

使用 maven-jetty-plugin 启用 HTTP2

grpc中不安全的连接是啥意思?

如何在没有 SSL 配置的情况下使用 spring boot 和 tomcat 启用 http2