【问题标题】:HTTP2 defaulting to HTTP/1.1HTTP2 默认为 HTTP/1.1
【发布时间】:2025-11-24 15:30:02
【问题描述】:

我正在尝试设置一个 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 配置信息。

标签: java http netty http2


【解决方案1】:

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

【讨论】: