nodejs / node

Node.js JavaScript runtime ✨🐢🚀✨
https://nodejs.org
Other
107.75k stars 29.68k forks source link

HTTP/3 support #38478

Open pimterry opened 3 years ago

pimterry commented 3 years ago

As far as I can tell, there's currently no open issue explicitly tracking for QUIC or HTTP/3. Selfishly I'm very interested in knowing when this is available, so I'd personally find it very valuable to have an issue (this issue) tracking the current state and progress.

To document the current state:

@jasnell I think you've been doing most of the legwork here (thank you!), is that about right?

Feel free to close this if it's a problem to create feature requests like this, but I suspect there's likely to be lots of people interested in QUIC & HTTP/3, so a central issue documenting it is pretty useful imo.

jasnell commented 3 years ago

Opening a tracking issue is perfectly fine :)

And yes, I'm working on reintroducing quic and http3 now. It's going to take a bit of time since it's not the only thing I have on my plate at the moment but it is coming. I'll provide a more detailed update later today

espoal commented 3 years ago

Subscribing to the issue. In an internal test I saw that HTTP/3 improved bounce rate and conversion rate, especially with users on poor connections.

@jasnell loving your work. I don't think at my skill level I can be of any help, but let me know.

ramsundhar20 commented 3 years ago

Great work on this @jasnell. Looking forward for your contribution in developing this. In this latest era of remote worlds (thanks to COVID), the need for this QUIC & HTTP/3 support in Nodejs is undeniable.

Let me know if you need some assitance.

rekire commented 3 years ago

Any updates here? QUIC has been approved as RFC-9000.

jasnell commented 3 years ago

Work is underway. I'm reworking the underlying impl. Expect an update in about a week

boaerosuke commented 3 years ago

Hi @jasnell, I guess you have a lot to do at nearforms. Are there any updates on this issue? Or is it already possible to somehow do experimental QUIC based application implementations within its current state in node.js?

espoal commented 3 years ago

@boaerosuke I think this is becoming a blocker for this issue, so work is still progressing.

jasnell commented 3 years ago

Work is still progressing. Slow going, but moving forward.

boaerosuke commented 3 years ago

Thanks for your feedback! Absolutely appreciating your work!

rysolv-bot commented 3 years ago

rustalot has contributed $75.00 to this issue on Rysolv.

The total bounty is now $75.00. Solve this issue on Rysolv to earn this bounty.

rustalot commented 3 years ago

Hey @jasnell, feel free to remove if off topic. I added a bounty on this issue. Understandably it's more that $75 worth of work, but wanted to chip in towards your work.

rysolv-bot commented 3 years ago

An anonymous user has contributed $50.00 to this issue on Rysolv.

The total bounty is now $125.00. Solve this issue on Rysolv to earn this bounty.

jasnell commented 3 years ago

Just an update... the basic support is implemented. The PR is ready for review tho overall it's still far from done.

rysolv-bot commented 3 years ago

An anonymous user has contributed $20.00 to this issue on Rysolv.

The total bounty is now $145.00. Solve this issue on Rysolv to earn this bounty.

devsnek commented 3 years ago

james you're gonna be rich soon 🤑

rysolv-bot commented 3 years ago

An anonymous user has contributed $57.10 to this issue on Rysolv.

The total bounty is now $202.10. Solve this issue on Rysolv to earn this bounty.

rysolv-bot commented 3 years ago

jhurliman has contributed $10.00 to this issue on Rysolv.

The total bounty is now $212.10. Solve this issue on Rysolv to earn this bounty.

espoal commented 3 years ago

Unfortunately it seems we've met a blocker: OpenSSL QUIC support has been delayed by at least 12 to 18 months.

More information here.

jasnell commented 3 years ago

It's not a blocker at this point. We're currently using the quictls fork of OpenSSL

ramsundhar20 commented 2 years ago

@jasnell Great to know that it's not a blocker. Awaiting for this feature.

shlinka commented 2 years ago

Cheer up @jasnell ! Can't wait to do benchmarks on node http3

rysolv-bot commented 2 years ago

An anonymous user has contributed $20.00 to this issue on Rysolv.

The total bounty is now $232.10. Solve this issue on Rysolv to earn this bounty.

rysolv-bot commented 2 years ago

An anonymous user has contributed $10.00 to this issue on Rysolv.

The total bounty is now $242.10. Solve this issue on Rysolv to earn this bounty.

rysolv-bot commented 2 years ago

pahlers has contributed $20.00 to this issue on Rysolv.

The total bounty is now $262.10. Solve this issue on Rysolv to earn this bounty.

rysolv-bot commented 2 years ago

An anonymous user has contributed $10.00 to this issue on Rysolv.

The total bounty is now $272.10. Solve this issue on Rysolv to earn this bounty.

rysolv-bot commented 2 years ago

pimterry has contributed $1000.00 to this issue on Rysolv.

The total bounty is now $1272.10. Solve this issue on Rysolv to earn this bounty.

rysolv-bot commented 2 years ago

An anonymous user has contributed $10.00 to this issue on Rysolv.

The total bounty is now $1282.10. Solve this issue on Rysolv to earn this bounty.

martenrichter commented 2 years ago

While we are all desparately waiting for bullet proof http/3 in node, I made a duct tape solution using library quiche (https://github.com/google/quiche), you can find it here: https://github.com/fails-components/webtransport . Just passed initial tests, and not released yet, input and PR are welcome. And the addon is currently only limited to http/3 webtransport and building only tested on linux, since this what I needed. I also think, from this point, normal request and resolv handling (so normal http/3) could be added easily (may be 5 . However, I do not need it for my project, but I will offer supports and guidance, if someone wants to make a PR and contribute.

Once native support for webtransport arrives in node, I will probably use the native support and drop the project, but until then.

9ssi7 commented 2 years ago

Subscribing to the issue. It was recently introduced by the http3 internet draft. I'm leaving this comment to contribute to the resolution of Issue. You'll see that there is interest, and maybe support will arrive sooner.

How are things going right now? Will I see http3 and QUIC support in v18?

hellafont commented 2 years ago

Subscribing to the issue. It was recently introduced by the http3 internet draft. I'm leaving this comment to contribute to the resolution of Issue. You'll see that there is interest, and maybe support will arrive sooner.

How are things going right now? Will I see http3 and QUIC support in v18?

if you help implement it instead of just bugging the people who are so kindly doing so for us, maybe... lol

9ssi7 commented 2 years ago

Subscribing to the issue. It was recently introduced by the http3 internet draft. I'm leaving this comment to contribute to the resolution of Issue. You'll see that there is interest, and maybe support will arrive sooner.

How are things going right now? Will I see http3 and QUIC support in v18?

if you help implement it instead of just bugging the people who are so kindly doing so for us, maybe... lol

It is not my intention to offend anyone. Only certain things are supplied by demand. And rest assured, I'll try to write code for nodeJS when I get a little better myself

rysolv-bot commented 2 years ago

An anonymous user has contributed $10.00 to this issue on Rysolv.

The total bounty is now $1392.10. Solve this issue on Rysolv to earn this bounty.

jpike88 commented 2 years ago

https://www.itnews.com.au/news/http-3-becomes-a-standard-at-last-581067

Looks like HTTP3 is now official

theseyan commented 2 years ago

Any updates? We would love to have access to the current implementation even if through experimental flags. And HTTP3 is now standard, cheers!

firminochangani commented 2 years ago

@theseyan The latest discussion on this topic has happened on this PR: #38233

masx200 commented 2 years ago

https://www.rfc-editor.org/rfc/rfc9114.html

arjndr commented 2 years ago

Just wondering, why should this be implemented in Node? Isn't stuff like this usually handled by something like Nginx? Can anyone please enlighten me?

mreinstein commented 2 years ago

Isn't stuff like this usually handled by something like Nginx? Can anyone please enlighten me?

Node does indeed implement both http/1 [1] and http/2 [2] servers. The use case you're describing (having nginx serve content) is one use valid use case, but another is having node/express/etc. be able to speak http for dynamic content.

[1] https://nodejs.org/dist/latest-v16.x/docs/api/http.html [2] https://nodejs.org/dist/latest-v16.x/docs/api/http2.html

jpambrun commented 2 years ago

For WebTransport (which I understand to be HTTP3's websocket) to be useful it needs to be handled at the application level, not nginx.

On Tue, Jun 28, 2022, 3:50 PM Mike Reinstein @.***> wrote:

Isn't stuff like this usually handled by something like Nginx? Can anyone please enlighten me?

Node does indeed implement both http/1 [1] and http/2 [2] servers. The use case you're describing (having nginx serve content) is one use valid use case, but another is having node/express/etc. be able to speak http for dynamic content.

[1] https://nodejs.org/dist/latest-v16.x/docs/api/http.html [2] https://nodejs.org/dist/latest-v16.x/docs/api/http2.html

— Reply to this email directly, view it on GitHub https://github.com/nodejs/node/issues/38478#issuecomment-1169164365, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAFPMMFZXCZGHFTU4J5BWXDVRNJQVANCNFSM433WB4BQ . You are receiving this because you are subscribed to this thread.Message ID: @.***>

inventivejon commented 2 years ago

Any news?

introspection3 commented 2 years ago

Any news?

mreinstein commented 2 years ago

Patience. There is no need to ping the node team constantly about this. http3 is on their radar; when they have something to share, they will.

ClosetGeek-Git commented 1 year ago

The big thing is that it has to be libuv friendly. Otherwise it will be the same story as WebRTC.

CMCDragonkai commented 1 year ago

What was the story with webrtc?

manraut commented 1 year ago

Is anyone trying to add HTTP/3 support? Fund is almost $1400 on rysolv.

rekire commented 1 year ago

I'm absolutely sure that someone is working on this topic. However those comments (and to be honest mine too) are spam and not helpful.

@jasnell can you be so kind to provide a short status update with the related bugs, so that it become easier to track the progress?

If possible please edit the report or your first comment. That should make it easier to track the current status without reading all (current 46) comments.

firminochangani commented 1 year ago

@unqmanish @rekire and to anyone in the future, please follow the threads/PRs:

trusktr commented 1 year ago

Can community votes be given higher priority? This is the 3rd-most voted issue:

https://github.com/nodejs/node/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc

Because of that, can perhaps this issue be worked on full time to completion with pretty much the highest priority over other things (apart from bugs and security issues)? 😃 🙏

I promise you won't regret it! After this is out someone is going to write an HTTP/3 multiplexing ES Module server!

bnoordhuis commented 1 year ago

can perhaps this issue be worked on full time to completion with pretty much the highest priority over other things

No. That's simply now how OSS works. If you're really invested in http/3, then what you could do is either work on it yourself or pay someone to do it for you.

clshortfuse commented 1 year ago

I'm assuming the current HTTP/3 path is like HTTP/2, but instead of nghttp2, nghttp3?

Since this is all UDP, this be written completely over JS (with dgram), I think. Probably not as optimized, but a proof of concept is possible, no?