有关 Web 浏览器中的 gRPC 支持以及它们如何利用 HTTP2

问题描述

在发现 gRPC 后,我偶然发现了 this blog post

为什么不是每个人都已经在他们的 SPA 中使用 gRPC?

传统上不可能使用基于浏览器的 gRPC 应用程序,因为 gRPC 需要 HTTP/2,而浏览器不会公开 任何让 JS/WASM 代码直接控制 HTTP/2 请求的 API。

但是有一个解决方案! gRPC-Web 是 gRPC 的扩展,它使得 它与基于浏览器的代码兼容(从技术上讲,这是一种 通过 HTTP/1.1 请求执行 gRPC)。 gRPC-Web 尚未流行 然而因为没有多少服务器或客户端框架提供支持 因为它......直到现在。

ASP.NET Core 从 3.0 版本开始就提供了很好的 gRPC 支持。和 现在,在此基础上,我们即将发布预览版支持 服务器和客户端上的 gRPC-Web。如果你想深入了解 详细信息,这是 James Newton-King 的优秀拉取请求 全部实现的地方。

这里有一些不错的信息,但此时帖子已经发布了大约一年。

最近还对 .NET 和 Blazor 技术进行了一些重大推动from Microsoft

看起来 grpc-web 维护得很好并且总是添加很多语言支持,所以这是需要关注的……但据我所知,grpc-web 仍然是为通过 HTTP1 运行而构建的.1?

对我来说,另一个问题仍然存在为什么浏览器 API 不支持 HTTP2,我找不到任何相关文档。

我很想开始使用 gRPC,但也担心它可能带来的缺点。

感谢您对我缺乏理解的任何解释。

请注意,关于此 here 的 SO 上有一个稍微相关的问题,其答案并不全面且较旧。

解决方法

我在我的项目中使用了 grpc 并了解您的问题。前两个问题可以通过引自 grpc.io 的引用以及一些详细说明来回答。

- 对我来说,另一个问题仍然存在,为什么 HTTP2 不是 通过浏览器 API 支持,我找不到任何 文档。

-看起来 grpc-web 维护得很好并且总是添加一个 很多语言支持,所以这是需要关注的......但是 据我了解,grpc-web 仍然是为在 HTTP1.1 上运行而构建的?

目前无法实现 HTTP/2 gRPC 规范 3 浏览器,因为根本没有足够细粒度的浏览器 API 控制请求。例如:没有办法强制 使用 HTTP/2,即使有,原始 HTTP/2 帧也是 在浏览器中无法访问。 gRPC-Web 规范从 查看 HTTP/2 规范,然后定义差异。 quote reference

- 我很想开始使用 gRPC,但也担心
可能带来的缺点。

我也想谈谈这个话题。为什么要使用 gRPC?这是关于 Http2 和 gRPC 的速度吗? Http1.1是旧技术吗? 今天,REST 协议适用于 Http1.1。如果他们开始使用Http2.0,这些接口不会有任何变化。此外,如果您不使用流式处理,REST 比 gRPC 更快。 gRPC 在速度方面具有更好的优势。

下面,我从 GRPC-WEB 链接了支持的 RPC 类型

enter image description here