LadybirdBrowser / ladybird

Truly independent web browser
https://ladybird.org
BSD 2-Clause "Simplified" License
22.43k stars 1k forks source link

[Feature Request] HTTP2 and HTTP3 support #1070

Open ONLYA opened 3 months ago

ONLYA commented 3 months ago

I am surprised that no one has ever mentioned this in this project before. The world is gradually switching to HTTP3 while HTTP2 is now dominating the web. Given the performance and the security and privacy features from HTTP3 protocol, it's becoming more and more important to have HTTP3 supported. Chrome, Firefox and Safari do not have full support of HTTP3 and I think that Ladybird supports HTTP3 will form a great distinction from those. This browser is a new project in development, which means that it won't be as challenging as the other established projects to change some underlying architecture in the code without so many technical debts as the barrier.

According to the README file:

LibHTTP: HTTP/1.1 client

It seems that the HTTP library lacks of the HTTP2 and HTTP3 support. According to https://github.com/SerenityOS/serenity/issues/24672, Ladybrid can use any other third party library like https://github.com/cloudflare/quiche. Given that this is written in Rust, it's also a good example of trying to integrate Rust crate into this C++ code base as a library.

ONLYA commented 3 months ago

There is another library: https://github.com/quicsec/quicsec. This is more likely higher-level than the quiche library.

mateli commented 3 months ago

The most important feature that HTTP3 provides is higher reliability on unreliable connections which were mainly developed with the Indian market in mind. Perhaps their internet is no longer as unreliable but there are still plenty of people worldwide that have reliability problems using HTTP2.

akash153759 commented 3 months ago

Need Security update and grapic & views need change

ChaseKnowlden commented 1 month ago

CURL already has support for HTTP/2 and HTTP/3. Can we close this issue?

ADKaster commented 1 month ago

Can we close this issue?

No, because HTTP/3 support is still experimental in curl

ONLYA commented 1 month ago

CURL already has support for HTTP/2 and HTTP/3. Can we close this issue?

According to https://curl.se/docs/http3.html, cURL with only ngtcp2 is not experimental.

HTTP/3 support in curl is considered EXPERIMENTAL until further notice when built to use quiche or msh3. Only the ngtcp2 backend is not experimental.

However, according to the ngtcp2 documentation, the TLS library is not using "LibCrypto/LibTLS". They are quictls, BoringSSL and aws-lc, GnuTLS, Picotls, and wolfSSL. There must be some other things more like this. If we do want to use it, we have to introduce one of these that is considerred as a duplicate of what ladybird currently has.

I think the best way is to refer to the QUIC and HTTP3 protocol documents like RFC 9000 and to implement it with the libraries ladybird is currently using as the basis. Then we will have a library called LibQUIC or an enhanced LibHTTP. Or we could contribute to the existing stable ones to add new supports that have the "Libxxx" as the basis.