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

spe*_*741 5 google-chrome http2 grpc

发现 gRPC 后,我偶然发现了这篇博文

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

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

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

自 3.0 版本以来,ASP.NET Core 提供了出色的 gRPC 支持。现在,在此基础上,我们将在服务器和客户端上发布对 gRPC-Web 的预览支持。如果你想深入了解细节,这里是 James Newton-King 的优秀拉取请求,它全部实现。

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

最近,微软还大力推动了 .NET 和 Blazor 技术。

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

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

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

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

注意,这个对SO略微相关的问题在这里,对此的答案是没有完全全面和更老。

Eyu*_*LAN 6

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

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

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

目前不可能在浏览器中实现 HTTP/2 gRPC 规范 3,因为根本没有浏览器 API 对请求进行足够细粒度的控制。例如:没有办法强制使用 HTTP/2,即使有,原始 HTTP/2 帧在浏览器中也无法访问。gRPC-Web 规范从 HTTP/2 规范的角度出发,然后定义差异。 报价参考

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

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

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

在此处输入图片说明

  • 鉴于 REST 根本没有正式定义,我们完全不清楚为什么“REST 比 gRPC 更快”。它更像是一种“哲学”,或者一种概念。换句话说,仅用性能方面的想法来比较具体协议及其实现实际上是不可能的。 (13认同)
  • 您能否分享一下您的性能测试结果 - “REST 比 gRPC 更快”? (3认同)
  • 那篇文章正是我正在寻找的内容。感谢您的见解。您知道为什么不能强制使用 HTTP/2 或者为什么不公开原始 HTTP/2 帧吗?从浏览器的角度来看,这是一个安全问题还是只是浏览器缺乏开发(无论出于何种原因)?看来 gRPC Web 不值得迁移额外的开销(至少在代理端) (2认同)
  • 我不确定我是否明白你在说什么。REST 和 gRPC 都可以在 HTTP 1 和 2 上工作。我也不明白什么是 Http2.2 - 如果我们谈论超文本传输​​协议,那么就没有这样的东西(而 Http 2.1也) - 只有 HTTP/2 (2认同)