HTTP2 默认为 HTTP/1.1

Posted

技术标签:

【中文标题】HTTP2 默认为 HTTP/1.1【英文标题】:HTTP2 defaulting to HTTP/1.1 【发布时间】:2019-06-03 06:35:57 【问题描述】:

我正在尝试设置一个 apache 负载平衡器来处理 HTTP2 连接,但是传入的连接默认为 HTTP/1.1 奇怪的是,只有当HTTP2 连接来自netty HTTP2 库时才会发生这种情况,当请求来自OKHTTP 库时,它会正常运行。

我正在使用的 SSLCipherSuite

SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM- 
SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128- 
SHA256:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256- 
SHA256:AES128-SHA256:AES256-SHA:AES128-SHA

用netty看到的错误是

io.netty.handler.codec.http2.Http2Exception:第一个接收到的帧不是设置。前 5 个字节的十六进制转储:485454502f 在 io.netty.handler.codec.http2.Http2Exception.connectionError(Http2Exception.java:85) 在 io.netty.handler.codec.http2.Http2ConnectionHandler$PrefaceDecoder.verifyFirstFrameIsSettings(Http2ConnectionHandler.java:350)

【问题讨论】:

这可能是因为服务器使用的是 SSL 而 netty 不是(反之亦然)。服务器是否使用 SSL? 是的,两者都超过了 ssl,我的另一个问题是我正在使用自签名证书。不确定 netty codec_http2 库是否接受自签名证书 你好,有解决办法吗,我也遇到类似的问题 github.com/netty/netty/issues/8717 解决方案是上面的链接,它是一个 apache 配置信息。 【参考方案1】:

github.com/netty/netty/issues/8717 解决方案是上面的链接,它是一个 apache 配置信息。 H2Direct on

【讨论】:

以上是关于HTTP2 默认为 HTTP/1.1的主要内容,如果未能解决你的问题,请参考以下文章

HTTP的长链接和短链接以及HTTP1.0HTTP1.1HTTP2.0

HTTP1.0和HTTP1.1以及HTTP2.0的区别

运维童鞋:HTTP2 和 HTTPS 不来多了解下麽??

HTTP2.0 相比 HTTP1.0HTTP1.1 有哪些重大改进?值得升级更换吗?

Linux-http1.0-http1.1-http2.0区别

http2概述及Java9对其的支持