为什么浏览器不支持gRPC?

9

gRPC基于HTTP/2,这是浏览器广泛支持的(假设)。因此,我认为从浏览器使用gRPC应该没有问题。

然而,很明显存在问题。grpc web协议是不同的,因为存在“由于浏览器限制”。还有许多博客文章描述了部署复杂技术堆栈以使gRPC能够从浏览器工作。

我不明白实际问题在哪里-为什么gRPC不能直接从浏览器工作?

3个回答

3

我现在明白了,浏览器仅支持HTTP/2的意思是它们使用它来代表你的应用程序(javascript)代码从服务器获取资源。

Javascipt应用程序代码仍然只能使用HTTP/1(可能由浏览器在HTTP/2连接下处理)。 因此,应用程序代码无法使用grpc。

如果有人能找到解释这一点的文档,将链接添加到此处会很好。


0

大多数浏览器使用HTTP1.1,而GRPC仅适用于HTTP2。您可以使用nginx、envoy或traefic在反向代理后运行它,非常类似于Web套接字通常在反向代理后使用的方式(在这种情况下,http1被升级为Web套接字连接)。反向代理将发送通过http1发送的grpc请求到http2后端,反之亦然。您可以使用Envoy(建议/当前由grpc-web使用)、traefik(我个人正在使用)和nginx。


0

这个问题一直在我脑海中,经过一番探索,我在https://grpc.io/blog/state-of-grpc-web/#the-grpc-web-spec找到了以下评论:

目前在浏览器中无法实现HTTP/2 gRPC规范3,因为没有足够细粒度控制请求的浏览器API。例如:无法强制使用HTTP/2,即使有,原始的HTTP/2帧也无法在浏览器中访问。

如果我说错了,有人可以纠正我,但我认为另一个原因是尽管浏览器广泛支持HTTP/2,但grpc不被支持的另一个原因是浏览器上没有实现服务器推送,原因有很多,可以在这个主题中讨论:如何在浏览器中实现HTTP/2流连接?


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