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.
I don't have a small reproducer for this, but I'm seeing that when I'm sending an ill-formed gRPC request to one of Google's servers (specifically, when I use a
GET
request instead of aPOST
request), I'm getting a response back from the server that looks something like this:and this then repeats a few times (within a single packet). I don't know why this repeats, but both the Google Python implementation and the the C++ implementation do this. When this happens,
http2
(the lib) throws anundefined
exception after it receives another HTTP2 messages on that now-reset stream. This commit changes this to simply drop such messages instead.The spec (https://datatracker.ietf.org/doc/html/rfc7540#section-6.4) is strangely silent on this topic: it says that when you receive a
RST_STREAM
, you MUST NOT send any messages on that stream anymore, and when you send aRST_STREAM
, you MUST be prepared to receive frames that your counterpart might have sent before it received theRST_STREAM
. However, it is silent on whether or not it's legal to send further frames after sending aRST_STREAM
, which is what we are observing here.