gRPC 基于 HTTP/2,它(假设)被浏览器广泛支持。因此,我觉得从浏览器使用 gRPC 应该没有问题。
但是,很明显存在问题。协议grpc web是不同的,因为“由于浏览器限制”而存在。还有许多博客文章描述了为使 gRPC 在浏览器中工作而部署的复杂技术堆栈。
我错过了实际问题 - 为什么 gRPC 不能简单地在浏览器中工作?
我现在了解浏览器仅支持 HTTP/2,因为它们使用它代表您的应用程序 (javascript) 代码从服务器获取资源。
Javascipt 应用程序代码仍然只能使用 HTTP/1(可以在 HTTP/2 连接中由浏览器在后台处理)。因此,应用程序代码不可能使用 grpc。
如果有人应该找到文档中对此进行解释的位置,最好在此处添加指向它的链接。
大多数浏览器使用 HTTP1.1,而 GRPC 仅适用于 HTTP2。您可以使用 nginx、envoy 或 traefic 在反向代理后面运行它,这与通常在反向代理后面使用 web 套接字的方式非常相似(在这种情况下,http1 升级为 websockets 连接)。反向代理会将通过 http1 发送的 grpc 请求发送到 http2 后端,反之亦然。你可以使用 Envoy(grpc-web 建议/当前使用)、traefik(我个人使用这个)和 nginx。