Skip to main content
gRPC

Request Metadata

RequestParseValidateEasy

What you will learn

  • Metadata (headers) can be sent at start AND as trailers โ€” trailers arrive AFTER the last message, used for rich error context
  • Binary metadata keys end in -bin (ASCII is raw) โ€” sending binary as ASCII corrupts the wire format
  • Never put secrets in uppercase metadata keys โ€” gRPC normalises to lowercase server-side, which can break signature verification

Description

Send custom headers/metadata with your gRPC request (e.g., authorization).

Test Scenario

// grpcurl with metadata
grpcurl -plaintext \
  -H 'authorization: Bearer token123' \
  -H 'x-request-id: req-456' \
  -d '{"id": "user-1"}' \
  localhost:50051 \
  practice.users.UserService/GetUser

// Server receives metadata in context

Testing Tips

  • โ€ขMetadata is similar to HTTP headers
  • โ€ขUse -H flag in grpcurl
  • โ€ขCommon metadata: authorization, x-request-id
// Playwright API Testing - gRPC (via REST gateway)
import { test, expect } from '@playwright/test';
test('gRPC unary call via gateway', async ({ request }) => {
const response = await request.post('/api/grpc/UserService/GetUser', {
data: { id: '1' }
});
expect(response.ok()).toBeTruthy();
const data = await response.json();
expect(data.user).toBeDefined();
});

Challenge ID: grpc-request-metadata

2 frameworks available