fix(http2): "Trailer" header should be allowed in HTTP/2 responses as per RFC 9110 #3648
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull request addresses the incorrect handling of the
Trailer
header in HTTP/2 responses within the hyper project. According to RFC 9110 "HTTP Semantics", theTrailer
header is not listed as a "hop-by-hop" header in section 7.6.1. RFC 9110 specifies that a sender intending to generate one or more trailer fields in a message should use theTrailer
header in the header section to indicate potential trailer fields, as mentioned in section 6.6.2.The current implementation in hyper may result in unnecessary warnings for gRPC calls, as gRPC implementations, such as grpc-go, routinely use the
Trailer
header to indicate the presence of trailers after the response body. (See this behavior in grpc-go's implementation.This fix updates hyper to correctly allow the
Trailer
header in HTTP/2 responses, aligning it with RFC 9110 and preventing misleading warnings in environments using gRPC, such as linkerd2-proxy, which prints a warningConnection header illegal in HTTP/2: trailer
on every gRPC call.Note: Mozilla's documentation mistakenly lists
Trailer
as a hop-by-hop header, which is incorrect.