Should Neqo support the HTTP DATAGRAM Capsule?
This document defines the DATAGRAM (0x00) Capsule Type. This Capsule allows HTTP Datagrams to be sent on a stream using the Capsule Protocol. This is particularly useful when HTTP is running over a transport that does not support the QUIC DATAGRAM frame.
https://www.rfc-editor.org/rfc/rfc9297.html#section-3.5
One use-case would be proxying an HTTP/3 connection over a MASQUE connect-udp HTTP/3 proxy connection (https://github.com/mozilla/neqo/pull/2796), where the proxy connection does not support the QUIC datagram extension.
Asked differently, do we expect wide deployments of MASQUE connect-udp proxy servers without the QUIC datagram extension?
Note that this is not relevant for WebTransport datagrams, as WebTransport requires WebTransport datagrams to be sent via QUIC datagrams:
WebTransport over HTTP/3 also requires support for QUIC datagrams. To indicate support, both the client and the server MUST send a max_datagram_frame_size transport parameter with a value greater than 0 (see Section 3 of [QUIC-DATAGRAM]).
Any WebTransport requests sent by the client without enabling QUIC and HTTP datagrams MUST be treated as malformed by the server, as described in Section 4.1.2 of [HTTP3].
https://www.ietf.org/archive/id/draft-ietf-webtrans-http3-13.html#section-3.1
Asked differently, do we expect wide deployments of MASQUE connect-udp proxy servers without the QUIC datagram extension?
Do we know what Fastly supports? I'd prioritize it accordingly.
Given where things are going with respect to discussion of intermediating MASQUE and the capsule protocol stuff, I would say the answer is yes. The concern here is that some intermediaries might relay the HTTP/2 version without rewriting capsules.
It should be relatively easy to parse and pass along in much the same way as a frame. The only trick I can see is in managing the weirdness you get as a result (like datagrams that span multiple packets).
@WaterWhisperer in case you are looking for another challenge, this might be interesting for you. It is a bit more involved than https://github.com/mozilla/neqo/pull/3077/ as it requires reading the above linked RFCs. Also happy to suggest alternatives, in case you are generally interested, just not in this particular one. E.g. https://github.com/mozilla/neqo/pull/3102 might be interesting.
@WaterWhisperer in case you are looking for another challenge, this might be interesting for you. It is a bit more involved than #3077 as it requires reading the above linked RFCs. Also happy to suggest alternatives, in case you are generally interested, just not in this particular one. E.g. #3102 might be interesting.
@mxinden Thanks! Well, I don't know if I can do it, but I'd like to give it a try. Thanks again for your guidance and trust!