[release/9.0] (http2): Lower WINDOWS_UPDATE received on (half)closed stream to stream abortion#63934
Merged
wtgodbe merged 2 commits intorelease/9.0from Oct 7, 2025
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull Request Overview
This PR modifies Kestrel's HTTP/2 behavior to be less restrictive when handling WINDOW_UPDATE frames received on closed/half-closed streams. Instead of aborting the entire connection, it now treats this as a stream-level error, which improves compatibility with clients and reduces connection churn.
- Changed WINDOW_UPDATE frame handling on reset streams from connection abortion to stream-level error
- Updated test expectations to reflect the new stream-level error behavior instead of connection-level errors
- Removed quarantine annotation from related test case
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| src/Servers/Kestrel/Core/src/Internal/Http2/Http2Connection.cs | Modified WINDOW_UPDATE frame processing to throw stream error instead of connection abort |
| src/Servers/Kestrel/test/InMemory.FunctionalTests/Http2/Http2ConnectionTests.cs | Updated test to expect stream error and removed quarantine annotation |
Member
|
Failure unrelated |
This was referenced Nov 11, 2025
Closed
Closed
Closed
This was referenced Mar 2, 2026
Closed
Open
Merged
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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 #63873 to release/9.0
(http2): Lower WINDOWS_UPDATE received on (half)closed stream to stream abortion
Change affects the server HTTP/2 behavior in the case client sends the RST_STREAM frame (moving stream to half-closed or closed state) and then sends another packet - WINDOW_UPDATE. Server behavior varies in this case (RFC HTTP/2 does not describe this case extremely clear) - for example HTTP.SYS does interpet this as a stream-level error (ignore of WINDOW_UPDATE packet); but Kestrel is more strict and sends the GO_AWAY packet closing not only the stream, but also the whole connection.
Such restrictive behavior of Kestrel impacts the client, which observes cancellations and has to re-establish the connection frequently.
Fixes #63726
Customer Impact
1P Customer which processes intensive traffic of another 1P customer with a Golang-based client observes high volume of cancellations. This not only impacts the performance where a new connection has to be established, but also means all streams existing on the connection were lost, resulting in bunch of customers seeing high latency.
Regression?
Risk
Small change in behavior making Kestrel less restrictive. Also is being tested by the 1P team.
Verification
Packaging changes reviewed?
When servicing release/2.3