quic|http2: implement webtransport capsule protocol support
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 122k
- Forks
- 37.3k
- Avg merge
- 4d 2h
- Merged PRs (30d)
- 283
Description
Beside the quic webtransport wire protocol, there is also the capsule protocol, initially developed for http/2, but know also mentioned in the spec drafts as alternative means of transport for http/3.
As browser support is limited (or not existing), I have also made a draft for webtransport over websocket:
https://datatracker.ietf.org/doc/draft-richter-webtransport-websocket/
that allows to polyfill on the UA side.
Both are implemented in my own package:
https://github.com/fails-components/webtransport/tree/master/main/lib/http2/node
and the polyfill over websocket is successfully tested for a while in my deployment.
I have asked upstream nghttp2, nghttp3, there is currently no plan to implement it.
My plan would to turn my low level code to match a subset of QuicSession, and QuicStream interfaces with regard to webtransport and stream/iter (compare PR for quic https://github.com/nodejs/node/pull/63827) and add it to node.js. (Though I do not know where to place it).
(One side note, I have translated some BSD style licensed code from quiche to js (just two files), I would assume, that this should be ok with node.js licenses or do I need to replace this portion ?).
(And if this becomes important, we can still port hot path to C)
@jasnell @pimterry does this sound like a plan?
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing the referenced Node.js QUIC PR and the implementation in main/lib/http2/node from the linked package. Determine where a capsule protocol implementation could fit and how it should match the proposed QuicSession and QuicStream subset. Done means an agreed placement, resolved licensing questions, and working capsule support in Node.js.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, nodejs
- Domain
- backend, networking
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100