New Features
- stats: Expose the effective client authority (sent on the wire as the HTTP/2
:authorityheader) in clientstats.OutHeaderevents. (#9296)- Special Thanks: @aryansk
- metadata: Add
ValueFromOutgoingContext, which reads a single metadata value from outgoing context without copying the entire outgoing metadata into a new map. (#9282)- Special Thanks: @yuyangguo42
Bug Fixes
- transport: Refine control buffer throttling to only count peer-induced control frames, raise the default
GRPC_GO_EXPERIMENTAL_CONTROL_BUFFER_THROTTLE_LIMITfrom 100 to 10,000, and close client connections if reads remain throttled for10s. (#9563) - server: Ensure
Stop()forcefully terminates the server whileGracefulStop()is waiting for active handlers to complete. (#9394)- Special Thanks: @stanhu
- server: Unconditionally increment the highest-seen stream ID on when handling
HEADERSframes to comply with RFC 7540 §5.1.1. Previously, truncatedHEADERSframes left the connection in an inconsistent state and allowed stream IDs to be reused by clients without resulting in a protocol error. (#9414) - server: Terminate streams immediately when a
HEADERSframe includes theEndStreambit. Previously, this caused server handlers to hang when reading a message. (#9391) - server: Reject requests missing both
:authorityandHostheaders with HTTP 400 and statusInternal. (#9365) - xds: Fix a bug where route header matchers with non-lowercase names failed to match routes. (#9353)
- Special Thanks: @winklemad
- client: Ensure retried RPCs use the correct
:authorityvalue specified by the LB policy instead of inheriting it from a previous attempt. (#9277)- Special Thanks: @nvxbug
- transport: Fail streams with
io.ErrUnexpectedEOFinstead ofio.EOFupon receiving truncated message headers or bodies after partial data has already been received. (#9204)- Special Thanks: @buger