Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP/3 support #38478

Open
pimterry opened this issue Apr 30, 2021 · 57 comments
Open

HTTP/3 support #38478

pimterry opened this issue Apr 30, 2021 · 57 comments
Labels
feature request Issues that request new features to be added to Node.js. quic Issues and PRs related to the QUIC implementation / HTTP/3.

Comments

@pimterry
Copy link
Member

pimterry commented Apr 30, 2021

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:

  • QUIC was tracked in QUIC support #23064
  • That was closed when the experimental implementation was started
  • That entire implementation was later removed due to lack of support in OpenSSL
  • We've now moved to the Quictls fork of OpenSSL to avoid being blocked by OpenSSL's approach to implementing QUIC
  • There's a draft QUIC implementation being worked on here.
  • That QUIC implementation is a prerequisite for any HTTP/3 implementation (so we're still a way off)

@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.

@aduh95 aduh95 added feature request Issues that request new features to be added to Node.js. quic Issues and PRs related to the QUIC implementation / HTTP/3. labels Apr 30, 2021
@jasnell
Copy link
Member

jasnell commented Apr 30, 2021

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
Copy link

espoal commented May 11, 2021

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
Copy link

ramsundhar20 commented May 17, 2021

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
Copy link

rekire commented Jun 1, 2021

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

@jasnell
Copy link
Member

jasnell commented Jun 1, 2021

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

@boaerosuke
Copy link

boaerosuke commented Jun 30, 2021

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
Copy link

espoal commented Jul 1, 2021

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

@jasnell
Copy link
Member

jasnell commented Jul 3, 2021

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

@boaerosuke
Copy link

Thanks for your feedback! Absolutely appreciating your work!

@rysolv-bot
Copy link

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
Copy link

rustalot commented Jul 7, 2021

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
Copy link

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
Copy link
Member

jasnell commented Aug 10, 2021

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

@rysolv-bot
Copy link

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
Copy link
Member

devsnek commented Aug 10, 2021

james you're gonna be rich soon 🤑

@rysolv-bot
Copy link

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
Copy link

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
Copy link

espoal commented Oct 17, 2021

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
Copy link
Member

jasnell commented Oct 17, 2021

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

@ramsundhar20
Copy link

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

@shlinka
Copy link

shlinka commented Dec 26, 2021

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

@rysolv-bot
Copy link

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.

@theseyan
Copy link

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

@flowck
Copy link

flowck commented Jun 17, 2022

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

@masx200
Copy link
Contributor

masx200 commented Jun 27, 2022

@arjndr
Copy link

arjndr commented Jun 28, 2022

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
Copy link

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
Copy link

jpambrun commented Jun 28, 2022 via email

@inventivejon
Copy link

Any news?

1 similar comment
@introspection3

This comment was marked as abuse.

@mreinstein
Copy link

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
Copy link

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

@CMCDragonkai
Copy link

What was the story with webrtc?

@manraut

This comment was marked as off-topic.

@rekire
Copy link

rekire commented Jan 3, 2023

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.

@flowck
Copy link

flowck commented Jan 3, 2023

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

@trusktr
Copy link
Contributor

trusktr commented Feb 24, 2023

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
Copy link
Member

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
Copy link
Contributor

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?

@espoal
Copy link

espoal commented Feb 24, 2023

@clshortfuse a proof of concept was already delivered in node 17 if I was not wrong, but due to issues it was removed.

@SwapnilSoni1999
Copy link

I'm noob enough to make it go above from my head but after reading comments I can understand its still in process xD
Let see how next web protocol will feel in upcoming node versions

@torder-kkb

This comment was marked as off-topic.

@mreinstein
Copy link

@jasnell @bnoordhuis It might be good to lock this thread.

@burgil
Copy link

burgil commented Jul 23, 2023

I have a few thoughts and suggestions regarding the project's current status and potential improvements. Firstly, I'm curious about the decision to lock the project while it's still being worked on. Could you kindly clarify if it's nearing completion or if there are plans to continue development?

Secondly, it would be incredibly helpful to access an example to understand the implementation better. Could you please provide some guidance on where we can find a hands-on example?

Additionally, I've noticed that Google already employs h3 in all of its websites, which appears to be working quite effectively for them. As a game developer, I've experienced firsthand how UDP can offer significant speed advantages over TCP, although it does come with some reliability challenges. However, with real-time corrections, UDP can work remarkably well for games. Considering this, I wonder why we haven't explored its potential for websites earlier. Perhaps integrating it as the standard and out-of-the-box option when using Express.js, for instance, could bring about interesting benefits to man-kind.

I'm here, along with other community members, ready to assist with any programming issues and offer solutions in various languages. It's evident that Express.js has already outperformed Flask in all performance benchmarks, and I believe we should continue supporting its progress rather than leaving it behind. This project has the potential to make a positive impact, and I'm surprised that it has received relatively modest funding so far. It would be incredible if influential figures like Bill Gates could recognize the significance of this work and contribute to its success with substantial donations.

Moreover, I strongly believe that adopting such improvements could contribute to reducing CO2 emissions and foster a better world. Let's collaborate and work towards making this project reach its full potential."

@jpike88

This comment was marked as off-topic.

@burgil

This comment was marked as off-topic.

@nodejs nodejs locked as too heated and limited conversation to collaborators Jul 23, 2023
@nodejs nodejs deleted a comment from burgil Jul 23, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
feature request Issues that request new features to be added to Node.js. quic Issues and PRs related to the QUIC implementation / HTTP/3.
Projects
Status: Pending Triage
Development

No branches or pull requests