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

23

在发现gRPC后,我偶然看到了这篇博客文章

为什么不是每个人都在他们的单页应用程序中使用gRPC呢?

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

但有一个解决方案! 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 上有一个略微相关的问题,链接在这里,但答案并不全面且较旧。

1个回答

15

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

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

- 看起来grpc-web得到了很好的维护,并且一直添加许多语言支持,因此需要密切关注...但是据我所知grpc-web仍然构建在HTTP1.1上运行?

目前无法在浏览器中实现HTTP/2 gRPC规范,因为没有足够细粒度控制请求的浏览器API。例如:没有强制使用HTTP/2的方法,即使有,原始的HTTP/2帧在浏览器中也无法访问。gRPC-Web规范从HTTP/2规范的角度开始,然后定义了差异。 引用参考

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

我发表了一篇关于gRPC的文章。您应该阅读。这有助于了解gRPC。

我也想谈一下这个话题。为什么您想要使用gRPC呢?是因为Http2和gRPC的速度吗?Http1.1是过时技术吗?

如今,REST协议运行在Http1.1上。如果他们开始使用Http2.0,那么这些接口不会有任何变化。此外,如果您不使用流式处理,则REST比gRPC更快。但是,当考虑到速度时,gRPC具有更好的优势。

以下是GRPC-WEB支持的RPC类型链接:

输入图像描述


2
那篇文章正是我在寻找的。感谢您的洞见。您知道为什么无法强制使用HTTP/2或者为什么原始的HTTP/2帧没有暴露出来吗?这是从浏览器角度看的安全问题还是仅仅因为浏览器开发不足(由于某种原因)?看起来gRPC web并不值得为了迁移而增加额外的开销(至少在代理端)。 - spencer741
12
“REST比gRPC更快”的原因完全不清楚,因为REST根本没有被正式定义。它更像是一种“哲学”或概念。换句话说,从性能的角度来看,比较一个具体的协议及其实现和一个只是理念的东西是几乎不可能的。 - Anthony
1
如果你比较Http1.1和Http2.2协议,你会发现速度方面的问题。特别是要注意确认状态。此外,grpc可以在单个tcp上传输数据,但这对于Rest来说不可能。如果我们在流媒体上进行测试,也可以检测到这个问题。 - Eyup Can ARSLAN
2
我不确定我理解你在说什么。REST和gRPC都可以在HTTP 1和2上工作。我也不明白Http2.2是什么 - 如果我们谈论的是超文本传输协议,那么根本就没有这样的东西(还有Http 2.1)- 只有HTTP/2。 - Anthony
3
你能分享一下关于“REST比gRPC更快”的性能测试结果吗? - RamPrakash
显示剩余5条评论

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