首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接错误io.netty.handler.codec.http2.Http2Exception: HTTP/2客户端前缀字符串丢失或损坏。已接收字节的十六进制转储:

连接错误io.netty.handler.codec.http2.Http2Exception: HTTP/2客户端前缀字符串丢失或损坏。已接收字节的十六进制转储:
EN

Stack Overflow用户
提问于 2017-08-08 22:39:16
回答 2查看 12.6K关注 0票数 13

使用grpc双向流,当我尝试运行Grpc时,出现以下错误

代码语言:javascript
复制
Connection Error
io.netty.handler.codec.http2.Http2Exception: HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: at io.netty.handler.codec.http2.Http2Exception.connectionError(Http2Exception.java:82)
    at io.netty.handler.codec.http2.Http2ConnectionHandler$PrefaceDecoder.readClientPrefaceString(Http2ConnectionHandler.java:322)
    at io.netty.handler.codec.http2.Http2ConnectionHandler$PrefaceDecoder.decode(Http2ConnectionHandler.java:263)
    at io.netty.handler.codec.http2.Http2ConnectionHandler.decode(Http2ConnectionHandler.java:445)
    at io.netty.handler.codec.ByteToMessageDecoder.decodeLast(ByteToMessageDecoder.java:382)
    at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:286)
    at io.netty.handler.codec.http2.Http2ConnectionHandler.channelInactive(Http2ConnectionHandler.java:421)
    at io.grpc.netty.NettyServerHandler.channelInactive(NettyServerHandler.java:227)
    at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelInactiveNow(ChannelHandlerInvokerUtil.java:56)
    at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelInactive(DefaultChannelHandlerInvoker.java:92)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:135)
    at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:928)
    at io.netty.channel.AbstractChannel$AbstractUnsafe$7.run(AbstractChannel.java:674)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:339)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:356)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:742)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:748)

可能的问题是什么?

EN

回答 2

Stack Overflow用户

发布于 2017-09-09 03:21:31

需要注意的一件事是,NettyServerBuilder和使用纯文本的ManagedChannelBuilder的默认行为之间存在差异。

如果您没有在服务器上启用TLS (例如,通过调用服务器构建器上的sslContext()useTransportSecurity() ),那么您必须在连接到服务器的任何通道上调用ManagedChannelBuilder.usePlaintext(true)

因此,换句话说,服务器默认使用明文,但是对于通道,您需要调用usePlaintext()来允许与明文服务器进行通信。如果不是这样,您将得到这个确切的HTTP/2 client preface string missing or corrupt异常(尽管在我的例子中,十六进制转储后面有一个特定的字节字符串)。

票数 24
EN

Stack Overflow用户

发布于 2017-08-11 03:59:18

客户端和服务器没有达成一致。通常这是因为一个是明文,另一个使用TLS。但在某些环境中,这也可能是由于HTTP/1与HTTP/2造成的。

但是Hex dump for received bytes是空的,所以没有足够的信息来更准确地诊断问题。但是当我看到这个失败的时候,我从来没有见过字节是空的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45571314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档