Metadata
In addition to exchanging request and response messages between the client and server, gRPC also allows for exchanging metadata. Metadata are key+value pairs, where both the key and value are strings. In fact, a given key may have multiple values. It is directly analogous to request and response headers in HTTP. In fact, gRPC uses headers (and trailers) in the HTTP/2 protocol in order to convey metadata from client to server and back.
Metadata is often used for cross--cutting concerns--cases where you might otherwise have to embed multiple extra request fields into every single request message. Examples include authentication credentials, IDs to support distributed tracing, or even client and server properties that could be useful for debugging (such as the language and version they are running).
Since HTTP/2 headers are used to transmit metadata, there are some metadata keys that cannot be used: they are reserved by gRPC for implementing other aspects of the protocol. Like...