在.NET Core中,是否可以使用gRPC与HTTP/1.1一起使用?

14

我有两个网络服务,一个是gRPC客户端,另一个是gRPC服务器。服务器使用.NET Core编写,因此强制使用HTTP/2来支持gRPC。然而,客户端是一个托管在IIS 8.5上的.NET Framework 4.7.2 Web应用程序,因此只支持HTTP/1.1

由于升级客户端需要一些时间,所以我想知道是否可能在服务器端使用HTTP/1.1,而不是HTTP/2。但是我找不到任何关于如何实现这一点的信息。

在.NET Core中编写的gRPC服务器是否可以使用HTTP/1.1?如果可以,如何实现?

4个回答

13

不可以在HTTP 1.1上使用gRPC;不过你可以考虑使用Grpc.Core Google传输实现,而非托管型的Microsoft组件;该实现针对.NET Standard 1.5和.NET Standard 2.0,所以应该可以在.NET Core上工作,并且使用操作系统特定的非托管二进制文件(chttp2)进行传输。

对于客户端来说,两者几乎没有任何区别;唯一不同的是通道的创建方式,如下:

GrpcChannel.ForAddress(...)

使用微软传输,以及

new Channel(...)

使用Google传输。所有其他API都是共享的(在Grpc.Core.Api中)


如果我使用Microsoft transport new Channel(...),那么它必须是HTTP/1.1而不是HTTP/2吗?我如何在连接的gRPC通道上找到HTTP版本?谢谢。 - Marco
@Marco 你为什么这么认为?我很确定它是http/2,因为gRPC被定义为http/2。 - Marc Gravell
1
@Marco,此外,“new Channel”是Google的传输方式,而不是微软的,因此它是运行http/2的chttp。 - Marc Gravell
我查看了GRPC日志,没有提到HTTP/2,只有“http”。但是连接确实像从HTTP/2预期的那样保持活动状态。谢谢。 - Marco
1
@marco,如果你想使用MS传输,请使用GrpcChannel.ForAddress(...) - Marc Gravell

3
不。RPC调用仅通过HTTP/2完成。这使gRPC用户自动利用协议的所有功能。

2
gRPC不使用任何HTTP2特有的功能,而HTTP/1.1也具备响应拖尾(response trailers)的支持,通过分块编码(chunked encoding)实现,客户端流式传输也可以通过分块编码在HTTP/1.1中实现(这是一个非常少用的HTTP/1.1功能,但确实存在)。gRPC不能在HTTP/1.1上运行的说法是错误的。 - James Roper

1

0

你尝试过使用grpc-web?吗? 我相信它有一种解决方法可以使用http1.1而不是2.2。

需要注意一些事情,例如尾随和流式传输,由于http1.1支持这些功能,因此工作方式略有不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接