介绍
gRPC 是与语言无关的高性能远程过程调用 (RPC) 框架。 它基于 HTTP/2 构建,可通过 YARP 进行代理。 虽然 YARP 不需要注意 gRPC 消息,但确实需要确保启用正确的 HTTP 协议。 如果 YARP 未正确配置为发送和接收 HTTP/2 请求,gRPC 要求 HTTP/2 和 gRPC 调用将失败。
配置 YARP 的传入协议
大多数情况下,gRPC 都需要 HTTP/2。 HTTP/1.1 和 HTTP/2 默认在 ASP.NET 核心服务器(YARP 的前端)上启用,但它们需要 HTTP/2 的 https (TLS),因此 YARP 需要侦听 https://
URL。
http/2 over http(非 TLS)仅在 Kestrel 上受支持,并且需要特定设置。 有关详细信息,请参阅 ASP.NET Core 的 gRPC 服务。
以下步骤展示了如何配置 Kestrel,在非安全连接 (http) 上使用 HTTP/2(非 TLS):
{
"Kestrel": {
"Endpoints": {
"http": {
"Url": "http://localhost:5000",
"Protocols": "Http2"
}
}
}
}
配置 YARP 的传出协议
YARP 会自动为传出的代理请求协商 HTTP/1.1 或 HTTP/2,但仅适用于 https (TLS)。 HTTP/2 over http(非 TLS)需要其他设置。 请注意,传出协议独立于传入协议。 例如,https 可用于传入连接,将 http 用于传出连接,这称为 TLS 终止。 有关配置详细信息,请参阅 YARP HTTP 客户端配置。
下面显示了如何配置传出代理请求以使用 HTTP/2:
"cluster1": {
"HttpRequest": {
"Version": "2",
"VersionPolicy": "RequestVersionExact"
},
"Destinations": {
"cluster1/destination1": {
"Address": "http://localhost:6000/"
}
}
},
gRPC-Web
gRPC-Web 是与 HTTP/1.1 兼容的 gRPC 的替代线路格式。
-
application/grpc
- gRPC over HTTP/2 是通常如何使用 gRPC 的方式。 -
application/grpc-web
- gRPC-Web 修改 gRPC 协议,以与 HTTP/1.1 兼容。 gRPC-Web 可在更多位置使用。 gRPC-Web 可由浏览器应用和网络中使用,而无需完全支持 HTTP/2。 不支持两个高级 gRPC 功能:客户端流式处理和双向流式处理。
gRPC-Web 可由 YARP 的默认配置进行代理,而无需任何特殊注意事项。