feat: support gRPC-Web on frontend gRPC server (#8027)

feat: add gRPC-Web support using tonic-web

Signed-off-by: polar <palakjha916@gmail.com>
This commit is contained in:
Palak Jha
2026-04-24 12:18:15 +05:30
committed by GitHub
parent 10f3f59a01
commit aaa3f2cdf9
4 changed files with 26 additions and 1 deletions

1
.gitignore vendored
View File

@@ -74,3 +74,4 @@ AGENTS.md
# local design docs
docs/specs/
.vs/

19
Cargo.lock generated
View File

@@ -12118,6 +12118,7 @@ dependencies = [
"tokio-util",
"tonic 0.14.2",
"tonic-reflection",
"tonic-web",
"tower 0.5.2",
"tower-http 0.6.6",
"tracing",
@@ -14102,6 +14103,24 @@ dependencies = [
"tonic-prost",
]
[[package]]
name = "tonic-web"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29453d84de05f4f1b573db22e6f9f6c95c189a6089a440c9a098aa9dea009299"
dependencies = [
"base64 0.22.1",
"bytes",
"http 1.3.1",
"http-body 1.0.1",
"pin-project",
"tokio-stream",
"tonic 0.14.2",
"tower-layer",
"tower-service",
"tracing",
]
[[package]]
name = "tower"
version = "0.4.13"

View File

@@ -133,6 +133,7 @@ tokio-stream = { workspace = true, features = ["net"] }
tokio-util.workspace = true
tonic.workspace = true
tonic-reflection = "0.14"
tonic-web = "0.14"
tower = { workspace = true, features = ["full"] }
tower-http = { version = "0.6", features = ["full"] }
tracing.workspace = true

View File

@@ -355,7 +355,11 @@ impl Server for GrpcServer {
.layer(MetricsMiddlewareLayer)
.into_inner();
let mut builder = tonic::transport::Server::builder().layer(metrics_layer);
let mut builder = tonic::transport::Server::builder()
.accept_http1(true)
.layer(metrics_layer)
.layer(tonic_web::GrpcWebLayer::new());
if let Some(tls_config) = self.tls_config.clone() {
builder = builder.tls_config(tls_config).context(StartGrpcSnafu)?;
}