Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
web: make HTTP field names case-insensitive
I'm opening this PR to (hopefully!) stimulate a discussion. In brief, I'd like to amend the gRPC-Web protocol docs to encourage clients to follow standard HTTP semantics. The gRPC-Web specification is a nicely-designed way for proxies to expose standard HTTP/2 gRPC servers to clients using less tightly-controlled HTTP stacks, such as web browsers. To serve that goal, it seems valuable to have the gRPC-Web specification follow [RFC 9110 (HTTP Semantics)](https://www.rfc-editor.org/rfc/rfc9110.html#name-field-names). Like previous RFCs, 9110 specifies that "field names are case-insensitive." However, the current gRPC-Web specification requires that servers and proxies "use lower-case header/trailer names" on the wire. In principle, mandating casing on the wire is fine (if unusual); however, it encourages clients to violate HTTP semantics and _depend_ on the wire casing. I'd like to loosen the gRPC-Web specification to permit any casing on the wire, emphasizing that gRPC-Web clients ought to follow standard HTTP semantics and treat field names case-insensitively. This amendment does not affect the correctness of Envoy (which may continue to use lower-case field names) or the `grpc-web` Javascript project (which already treats field names case-insensitively, thanks to the Web Platform's `Headers` interface). However, it does clarify that `grpc-dart` is _incorrect_ in relying on lower-case field names. Relates to improbable-eng/grpc-web#228 and https://github.com/bufbuild/connect-go/issues/453/
- Loading branch information