Open EByrdS opened 11 months ago
Hi! Thanks for reporting!
I'm not really familiar with the go grpc server, and how metadata is propagated, but we do have a demo with a Node server which echos the metadata and prints it out.
You can run it using:
docker-compose up --build node-server envoy ts-client
And you can see the metadata being printed out in the console, with the following code: https://github.com/grpc/grpc-web/blob/1ab0bdc25b0d94428cb9d20cced5dcac00740a06/net/grpc/gateway/examples/echo/ts-example/client.ts#L70-L75
Could you try the above example, and then compare the base64 decoded payload of what you got on your setup v.s. the demo?
It should help understand where the discrepancies are.
Thanks :)
hey @EByrdS did you ever figure this out? i'm running into the same issue...
In short, the metadata of my web-grpc client is always empty.
Proto definition
Let's say my proto file looks like:
Code generation
I generated code for my proto files using
"grpc-web": "^1.4.2"
.And protoc:
The command is:
Server-side
The server of this gRPC sets the metadata header
some-header
in Golang:I know this is working fine because I can create a Golang client for this server and successfully read the headers, both by dialing into the grpc port directly, or by dialing an Envoy proxy that I have already set up.
Metadata transformed into HTTP headers
If I create my grpc client for the browser using grpc-web, I can see the metadata present in the HTTP Response Headers of the browser Network tab:
Issue within browser (grpc-web) typescript code
However, in the code the metadata is always empty.
I initialize my client in the following way:
And I have tried calling the method and reading metadata in the following ways:
Any ideas how can I read response metadata? Or why are these approaches not working?