grpc-web “Http response at 400 or 500 level”

原因:Go语言(也许其他语言也差不多)的GRPC库是使用HTTP/2.0进行交互的。而Grpc-Web框架则发送的事HTTP/1.1请求。协议不同就产生了这个错误。

检验方式:在Grpc-Web的Hello world样例工程 的说明文档,有一个快速搭建Grpc-Web服务的流程。最终的展示工程分为三个模块

  • client: 网页服务器运行在8081端口,向8080端口发送请求
  • server:在9090端口接收请求
  • proxy:将8080端口的请求路由到9090端口

如果我们修改工程,将client的请求端口直接对接到server监听端口,就会出现前端“Http response at 400 or 500 level”,后端“grpc: Server.Serve failed to create ServerTransport: connection error: desc = “transport: http2Server.HandleStreams received bogus greeting from client: \”OPTIONS /protos.Orderer/\””这样的报错。

解决方案1:按照Grpc-Web的文档,使用Envoy进行流量转换。

解决方案2:使用非官方库,在Go语言端多开一个端口转美与Grpc-Web进行交互。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据