[release/7.0] Respect SETTINGS_MAX_HEADER_LIST_SIZE on HTTP/2 and HTTP/3 #79994
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 #79281 to release/7.0
Fixes #78193
/cc @MihaZupan
Customer Impact
Without this change, users of HttpClient may randomly hit exceptions informing them that the server closed the connection. This is difficult to debug as nothing points you at the request headers being the culprit, and impacts reliability as unrelated requests may fail at the same time due to connection multiplexing.
With HTTP/2 and HTTP/3 the server has the option to advertise the maximum length of headers it is willing to receive.
This change respects that limit and fails offending requests before they make it onto the wire, improving the overall reliability of HttpClient while also providing a useful exception message to the user.
Testing
Added targeted CI tests.
The new behavior was validated with a test app running against Kestrel (both HTTP/2 and HTTP/3).
Risk
Low, this change enforces a limit that is specified by the server.
Any request that will fail with the new error was very likely already failing before.