diff mupdf-source/thirdparty/curl/docs/HTTP3.md @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mupdf-source/thirdparty/curl/docs/HTTP3.md	Mon Sep 15 11:43:07 2025 +0200
@@ -0,0 +1,121 @@
+# HTTP3 (and QUIC)
+
+## Resources
+
+[HTTP/3 Explained](https://daniel.haxx.se/http3-explained/) - the online free
+book describing the protocols involved.
+
+[QUIC implementation](https://github.com/curl/curl/wiki/QUIC-implementation) -
+the wiki page describing the plan for how to support QUIC and HTTP/3 in curl
+and libcurl.
+
+[quicwg.org](https://quicwg.org/) - home of the official protocol drafts
+
+## QUIC libraries
+
+QUIC libraries we're experiementing with:
+
+[ngtcp2](https://github.com/ngtcp2/ngtcp2)
+
+[quiche](https://github.com/cloudflare/quiche)
+
+## Experimental!
+
+HTTP/3 and QUIC support in curl is considered **EXPERIMENTAL** until further
+notice. It needs to be enabled at build-time.
+
+Further development and tweaking of the HTTP/3 support in curl will happen in
+in the master branch using pull-requests, just like ordinary changes.
+
+# ngtcp2 version
+
+## Build
+
+Build (patched) OpenSSL
+
+     % git clone --depth 1 -b openssl-quic-draft-22 https://github.com/tatsuhiro-t/openssl
+     % cd openssl
+     % ./config enable-tls1_3 --prefix=<somewhere1>
+     % make
+     % make install_sw
+
+Build nghttp3
+
+     % cd ..
+     % git clone https://github.com/ngtcp2/nghttp3
+     % cd nghttp3
+     % autoreconf -i
+     % ./configure --prefix=<somewhere2> --enable-lib-only
+     % make
+     % make install
+
+Build ngtcp2
+
+     % cd ..
+     % git clone -b draft-22 https://github.com/ngtcp2/ngtcp2
+     % cd ngtcp2
+     % autoreconf -i
+     % ./configure PKG_CONFIG_PATH=<somewhere1>/lib/pkgconfig:<somewhere2>/lib/pkgconfig LDFLAGS="-Wl,-rpath,<somehere1>/lib" --prefix==<somewhere3>
+     % make
+     % make install
+
+Build curl
+
+     % cd ..
+     % git clone https://github.com/curl/curl
+     % cd curl
+     % ./buildconf
+     % LDFLAGS="-Wl,-rpath,<somewhere1>/lib" ./configure -with-ssl=<somewhere1> --with-nghttp3=<somewhere2> --with-ngtcp2=<somewhere3>
+     % make
+
+## Running
+
+Make sure the custom OpenSSL library is the one used at run-time, as otherwise
+you'll just get ld.so linker errors.
+
+## Invoke from command line
+
+    curl --http3 https://nghttp2.org:8443/
+
+# quiche version
+
+## build
+
+Clone quiche and BoringSSL:
+
+     % git clone --recursive https://github.com/cloudflare/quiche
+
+Build BoringSSL (it needs to be built manually so it can be reused with curl):
+
+     % cd quiche/deps/boringssl
+     % mkdir build
+     % cd build
+     % cmake -DCMAKE_POSITION_INDEPENDENT_CODE=on ..
+     % make -j`nproc`
+     % cd ..
+     % mkdir .openssl/lib -p
+     % cp build/crypto/libcrypto.a build/ssl/libssl.a .openssl/lib
+     % ln -s $PWD/include .openssl
+
+Build quiche:
+
+     % cd ../..
+     % QUICHE_BSSL_PATH=$PWD/deps/boringssl cargo build --release --features pkg-config-meta
+
+Clone and build curl:
+
+     % cd ..
+     % git clone https://github.com/curl/curl
+     % cd curl
+     % ./buildconf
+     % ./configure LDFLAGS="-Wl,-rpath,$PWD/../quiche/target/release" --with-ssl=$PWD/../quiche/deps/boringssl/.openssl --with-quiche=$PWD/../quiche/target/release
+     % make -j`nproc`
+
+## Running
+
+Make an HTTP/3 request.
+
+     % src/curl --http3 https://cloudflare-quic.com/
+     % src/curl --http3 https://facebook.com/
+     % src/curl --http3 https://quic.aiortc.org:4433/
+     % src/curl --http3 https://quic.rocks:4433/