Add support for WebSockets over HTTP/2 #2894
Open
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.
Motivation
WebSockets over HTTP/2 are currently not supported. It is defined in RFC 8441 (websockets over HTTP/3 are defined in RFC 9220 and it is exactly the same as HTTP/2).
Solution
Implement the changes necessary to support them, which just requires looking at the
:protocol
pseudo-header in the websocket extractor and advertising our support by enablingSETTINGS_ENABLE_CONNECT_PROTOCOL
in HTTP/2.Additionally, I needed to fix the handling of responses to CONNECT requests: Axum was incorrectly adding the
Content-Length
header to them (see also hyperium/hyper#3748), which was causing things to break.