fullstorydev / grpcurl

Like cURL, but for gRPC: Command-line tool for interacting with gRPC servers
MIT License
10.64k stars 501 forks source link

Headers are lowercased #476

Open PavelA85 opened 1 month ago

PavelA85 commented 1 month ago

Hi, I try to provide header with -H "isDebug: true" but header name is lowercased with headerName := strings.ToLower(strings.TrimSpace(pieces[0])) during MetadataFromHeaders

Any reason for this behavior?

jhump commented 1 month ago

@PavelA85, metadata keys in gRPC (and in HTTP headers) are case-insensitive. In HTTP/2, they are always transmitted in lower-case. This lower-casing is done because the keys in a metadata.MD map must always be lower-case. Since this code is directly creating the map (instead of using methods on the metadata.MD type), it must make sure they are correctly canonicalized. Also see the relevant grpc-go docs.