Skip to main content
AllDevToolsHub
πŸ“¦

gRPC Web Tester

Browser-to-Target

Unary RPC client for gRPC-Web services.

gRPC Web Tester
Schema Definition
Paste your .proto definition to define service contracts.

Compiler Settings

Proto3Introspection
Remote Execution
Configure and trigger gRPC-Web unary RPC calls.
Unary

Response Buffer

Listening for Data Streams

Protobuf Binary Wire Format Encapsulation
Try:

Privacy note

This tool connects from your browser to the gRPC-Web endpoint you specify. Requests, metadata, and responses are exchanged with that target directly rather than being proxied through AllDevToolsHub.

How to Use gRPC Web Tester

01

Set Endpoint

Enter the gRPC server address and port.

02

Select Method

Choose the service and method from the proto definition, or paste a proto file.

03

Send Request

Enter the request payload as JSON and click Send. The response appears in the results panel.

gRPC Web Tester: the essentials

AllDevToolsHub's gRPC Web Tester is a free, browser-based tool that invokes unary RPC methods on any gRPC-Web endpoint without a protoc toolchain. No installation or account required, all RPC traffic stays in your browser. It invokes unary RPC methods on gRPC-Web endpoints from the browser, paste a .proto, point at a URL, send a JSON-shaped request, get the response. Useful when your service exposes gRPC-Web (often via Envoy) and you want a quick sanity check without spinning up Bloom RPC or BloomRPC alternatives.

Key points

  • Validates input against the relevant specification with detailed error reporting.
  • Catches edge cases and protocol variations before they reach production.
  • All testing runs locally, so production payloads and test data never leave your machine.
Overview

What is gRPC Web Tester?

Test gRPC-Web endpoints with a production-grade interface. Define your .proto schema, configure endpoints, and invoke unary RPC methods with JSON payloads.
FAQ

Frequently Asked Questions

Reference

Technical Deep Dive

TESTERS

gRPC Web Tester

Test your gRPC-Web endpoints with a production-grade interface. Define your .proto schema, configure your endpoint, and invoke unary RPC methods with human-readable JSON payloads and responses.

πŸ”

Real-Time Feedback

Type your input, see matches and errors highlight as you go.

πŸ§ͺ

Edge-Case Coverage

Tests against malformed input, boundary values, and the trickiest cases first.

πŸ“Š

Actionable Output

Errors come with line numbers, expected values, and links to the relevant spec.

01 Canonical Status Codes (0-16)

Code Status Semantic Context
0OKSuccess / Request completed
3INVALID_ARGUMENTClient error; bad payload format
5NOT_FOUNDResource or endpoint missing
7PERMISSION_DENIEDAuthenticated but lack specific scope
14UNAVAILABLEGateway / Service down or unreachable
16UNAUTHENTICATEDMissing or invalid credentials

02 Unary RPC Execution Pipeline

1
Descriptor Analysis The .proto schema is parsed to identify service methods, request message fields, and response structures.
2
Binary Serialization JSON input is serialized into a Protobuf binary message, wrapped in gRPC-Web framing, and dispatched via HTTP POST.
3
Response Deserialization The engine extracts the binary payload and trailers, surfacing the response as human-readable JSON alongside protocol metadata.

03 gRPC-Web vs gRPC-Native

Native gRPC rides on HTTP/2 and exploits low-level features like trailing headers, binary framing, and flow control that the browser fetch API simply does not expose. gRPC-Web is the bridge: a wire-compatible variant that re-encodes those primitives so a JavaScript client can speak to a gRPC backend through an Envoy or grpcwebproxy hop. Functionally the two share a .proto contract and a generated client surface, but the transport guarantees diverge in ways that matter when you choose a stack.

Aspect gRPC-Native gRPC-Web
TransportHTTP/2 with binary framingHTTP/1.1 or HTTP/2 via proxy
Client environmentServer, mobile, CLIBrowser (and Node via shim)
Streaming supportUnary + server + client + bidiUnary + server streaming only
Wire formatapplication/grpcapplication/grpc-web+proto or ...+text
TrailersNative HTTP/2 trailersEncoded inside response body
Proxy required?NoYes, Envoy, grpcwebproxy, or Connect
Typical deploymentService mesh, microservicesSPA β†’ gateway β†’ microservices

If you control both ends and neither is a browser, native gRPC is almost always the right answer, fewer hops, full streaming, smaller payloads. The moment a browser enters the picture you need the gRPC-Web shape. This tester targets the gRPC-Web path because that is what front-end engineers and full-stack developers actually need to debug from a webpage; the binary frames it sends are exactly what your production browser client will send.

04 Common Use Cases

🧰

Backend Smoke Tests

Verify a freshly deployed service responds with the expected status codes before wiring the production client. Drop in the .proto, point at the staging gateway, fire a unary call, confirm code 0.

πŸ›°οΈ

Envoy & Proxy Validation

Confirm your gRPC-Web filter, CORS policy, and trailer rewriting are correct. A misconfigured Envoy commonly strips grpc-status; this tester shows you exactly what arrived.

πŸ”

Auth Header Debugging

Add a Authorization: Bearer … header, inspect whether the gateway rejects with UNAUTHENTICATED (16) or PERMISSION_DENIED (7), and adjust scopes accordingly.

πŸ“š

Onboarding & Learning

New to gRPC? Paste a public .proto definition, send a sample request, and watch the binary framing happen, without scaffolding a full project or installing protoc.

πŸ›

Reproducing Bug Reports

QA hands you a failing RPC. Recreate the exact payload, headers, and endpoint here, capture the error code and message, and attach the result to the ticket, no React app required.

🚦

Contract Verification

After regenerating a client from updated .proto files, sanity-check that required fields, enums, and nested messages still serialize the way the server expects before shipping the SDK bump.

05 A Worked Example: From .proto to Response

The fastest way to understand the tester is to follow one call end to end. Suppose your backend exposes a simple user-lookup service. You paste this .proto into the schema panel:

syntax = "proto3";

package users.v1;

service UserService {
rpc GetUser (GetUserRequest) returns (GetUserResponse);
}

message GetUserRequest { string user_id = 1; }
message GetUserResponse {
string user_id = 1;
string display_name = 2;
bool is_active = 3;
}



The tester reads the descriptor, lists GetUser as the only callable method, and infers that the request needs a single user_id string. You supply the request as JSON, far easier to author than a hand-packed binary buffer:


{ "user_id": "u_8a31f0" }


On send, that JSON is serialized to a Protobuf message (field user_id β†’ tag 1, wire type 2), prefixed with the gRPC-Web frame header, a one-byte flag plus a four-byte big-endian length, and POSTed to your endpoint with Content-Type: application/grpc-web+proto. A healthy response comes back as another length-prefixed frame followed by a trailer frame, which the tester decodes and renders as:


{ "user_id": "u_8a31f0", "display_name": "Ada Lovelace", "is_active": true }
grpc-status: 0
grpc-message: ""


Because the field numbers in the .proto drive serialization, renaming a field is harmless but renumbering one is a breaking change, the server would read user_id off the wrong tag and likely answer with INVALID_ARGUMENT (3). Seeing the request and response side by side in JSON makes that class of contract drift obvious before it reaches production.


06 How Status Travels in the gRPC-Web Frame

A detail that trips up nearly everyone new to gRPC-Web: the call status does not live in the HTTP status code. A request can return HTTP 200 and still represent a failed RPC. The real outcome is carried in the grpc-status trailer, and in gRPC-Web that trailer is not a true HTTP trailer at all, because browsers cannot read those. Instead the proxy encodes it as a final frame inside the response body, flagged in the frame header so the client knows it is metadata rather than a message.

This has two practical consequences. First, any intermediary that buffers or rewrites the response body, an aggressive CDN, a compression layer, a misconfigured load balancer, can corrupt or drop that trailer frame, leaving the client to report an opaque error even though the service answered correctly. Second, you must check grpc-status, not the HTTP code, to know whether a call truly succeeded. A 200 with grpc-status: 5 is a NOT_FOUND, not a success.

The tester surfaces both layers so you are never guessing: it shows the HTTP status of the transport hop and, separately, the decoded grpc-status and grpc-message extracted from the trailer frame. When the two disagree, that gap is usually your proxy configuration talking, and seeing it explicitly is half the battle when debugging an Envoy or gateway setup.

07 Troubleshooting Tips

Most gRPC-Web failures look identical at first glance, an opaque UNAVAILABLE in the console, but they cluster into a handful of root causes. When a request fails, work down this list in order before assuming the backend is broken.

  • CORS preflight rejected. Open the browser network tab and look for an OPTIONS request returning anything other than 200/204. Your proxy needs Access-Control-Allow-Headers to include x-grpc-web, x-user-agent, and grpc-timeout.
  • Wrong Content-Type. The server expects application/grpc-web+proto or application/grpc-web-text. A 415 means the proxy was not configured to accept that framing.
  • Trailers stripped. If you get a 200 response but no grpc-status, an upstream proxy (often a CDN or load balancer) is dropping trailers. Move the gRPC-Web filter closer to the service.
  • Token in the wrong header. Some gateways read Authorization; others expect a custom header forwarded as metadata. Try both and watch for code 16 vs 7.
  • .proto drift. Adding a non-optional field on the server without redeploying the client schema yields INVALID_ARGUMENT (3). Re-paste the latest .proto into the tester.

You Might Also Need