gRPC-Web 集成
学习如何使用 gRPC-Web 代理,让 Web 浏览器能够直接进行 gRPC 通信
gRPC-Web 集成 是 CoddyKit 上的免费 gRPC & High Performance APIs 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 gRPC & High Performance APIs 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 gRPC & High Performance APIs 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
Bridging Browsers to gRPC
Welcome to gRPC-Web Integration!
You've learned about gRPC's power for high-performance communication. But what if you want your web browser applications to talk to gRPC services directly? That's where gRPC-Web comes in.
This lesson explores how gRPC-Web enables browser-based clients to interact with gRPC backends.
Why Browsers Need gRPC-Web
Modern browsers don't fully expose the low-level HTTP/2 features that native gRPC relies on, especially for advanced streaming capabilities.
- No full HTTP/2 control: Browsers abstract away direct HTTP/2 frame manipulation.
- CORS restrictions: Cross-Origin Resource Sharing (CORS) policies can complicate direct gRPC connections.
- Limited header access: Some gRPC-specific headers might not be accessible or modifiable.
These limitations prevent a standard gRPC client from running directly in a browser.
Introducing the gRPC-Web Proxy
The core idea behind gRPC-Web is to use a proxy. This proxy sits between your browser client and your gRPC server.
- The browser client sends requests in a gRPC-Web compatible format (often HTTP/1.1 or a restricted HTTP/2).
- The gRPC-Web proxy translates these requests into native gRPC (full HTTP/2) and forwards them to your gRPC server.
- It also translates the gRPC server's responses back into a format the browser client understands.
Think of it as a translator for your browser to speak gRPC.
Common Proxy Solutions
While you could write your own, several robust proxies are available:
- Envoy Proxy: A popular, high-performance open-source edge and service proxy. It has built-in support for gRPC-Web.
grpcwebproxy: A dedicated proxy written in Go, specifically designed for gRPC-Web.
These tools handle the complex translation layer, allowing your gRPC server to remain a standard gRPC server.
The Communication Flow
Here's a simplified view of how a gRPC-Web call works:
- Browser Client: Makes an HTTP/1.1 (or restricted HTTP/2) request to the proxy.
- gRPC-Web Proxy: Receives the request, converts it to a standard HTTP/2 gRPC request.
- gRPC Server: Processes the native gRPC request and sends back a native gRPC response.
- gRPC-Web Proxy: Receives the gRPC response, converts it back to an HTTP/1.1 (or restricted HTTP/2) response.
- Browser Client: Receives and processes the converted response.
Protobuf for Web Clients
Just like with regular gRPC, you define your service and messages using Protocol Buffers (Protobuf).
To generate client-side code for browsers, you use a special Protobuf plugin, typically protoc-gen-grpc-web. This generates JavaScript or TypeScript code that works with browser environments.
This generated code knows how to format requests for the gRPC-Web proxy and parse its responses.
Example: Web Client Call
After generating your client stubs, making a gRPC-Web call from JavaScript/TypeScript looks familiar. Here's a conceptual snippet for a GreeterService:
(Note: This code is illustrative and not runnable without a full gRPC-Web setup including proto compilation, a running proxy, and server.)
import {HelloRequest} from './helloworld_pb';
import {GreeterClient} from './HelloworldServiceClientPb';
const client = new GreeterClient(
'http://localhost:8080', // Proxy address
null, null
);
const request = new HelloRequest();
request.setName('CoddyKit User');
client.sayHello(request, {}, (err, response) => {
if (err) {
console.error(err.code, err.message);
return;
}
console.log(response.getMessage());
});Server-Side Remains Standard
One of the great advantages of gRPC-Web is that your gRPC server doesn't need to know anything about it!
The server simply receives standard gRPC requests (HTTP/2) from the proxy and sends back standard gRPC responses. This means you don't need to change your existing gRPC service implementations to support browser clients.
This separation of concerns simplifies development and maintenance.
Streaming Limitations in gRPC-Web
While gRPC-Web is powerful, it has some limitations compared to native gRPC:
- Unary RPCs: Fully supported (request-response).
- Server Streaming: Generally supported (server sends multiple responses to one request).
- Client Streaming: Not typically supported due to browser limitations on streaming requests.
- Bidirectional Streaming: Not typically supported for the same reason.
For applications heavily relying on client or bidirectional streaming, native gRPC clients (e.g., in Node.js, mobile apps) are usually required.
Quick Check: gRPC-Web Purpose
Which of the following statements accurately describe the primary purpose or characteristics of gRPC-Web?
Recap: Bridging Browsers & gRPC
You've successfully learned about gRPC-Web!
- It's a solution to enable web browser clients to interact with gRPC services.
- It works by using a proxy (like Envoy or
grpcwebproxy) to translate requests and responses. - Your gRPC server remains standard, unaware of the gRPC-Web layer.
- While it supports unary and server streaming, client and bidirectional streaming are typically not supported.
This powerful tool bridges the gap, bringing the benefits of gRPC to your web applications!
常见问题解答
「gRPC-Web 集成」课时是免费的吗?
是的 — 「gRPC-Web 集成」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 gRPC & High Performance APIs 课程的其余内容,请升级到 CoddyKit PRO。 gRPC & High Performance APIs 课程共包含 4 节课。
「gRPC-Web 集成」这节课中我会学到什么?
学习如何使用 gRPC-Web 代理,让 Web 浏览器能够直接进行 gRPC 通信 你通过在浏览器中直接运行的动手代码来练习 gRPC & High Performance APIs,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 gRPC & High Performance APIs 需要有经验吗?
无需任何先前经验。CoddyKit 上的 gRPC & High Performance APIs 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「gRPC-Web 集成」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 gRPC & High Performance APIs 课中编写并运行代码吗?
能。每节 gRPC & High Performance APIs 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- gRPC-Web 集成
- gRPCurl 与 BloomRPC
- 服务发现模式
- 服务器反射与动态客户端