[release/6.0] Send 431 when HTTP/2&3 headers are too large or many #33622 #44771
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.
Backport of #44668 to release/6.0
Send 431 when HTTP/2&3 headers are too large or many
Harden HTTP/2 & 3 to send back 431 errors rather than aborting the connection.
Description
When HTTP/2 hits a header related limit (total size or count) it aborts the connection because HPACK is stateful and failing to process the rest of the headers in a request could corrupt the connection HPACK state. HTTP/3 copied this model. This causes performance and debuggability issues for applications.
To avoid this we'll allow up to 2x of the limits while processing the headers, but then enforce the hard limits later when we can send a 431.
Contributes to #17861 #33622
Customer Impact
Customers have a hard time debugging an application when it kills the connection without reporting an error to the client. It also affects other parallel requests on the same connection.
Regression?
Risk
Small modification to existing behavior.
Verification
Packaging changes reviewed?