Annotation of embedaddon/curl/docs/HTTP3.md, revision 1.1
1.1 ! misho 1: # HTTP3 (and QUIC)
! 2:
! 3: ## Resources
! 4:
! 5: [HTTP/3 Explained](https://daniel.haxx.se/http3-explained/) - the online free
! 6: book describing the protocols involved.
! 7:
! 8: [QUIC implementation](https://github.com/curl/curl/wiki/QUIC-implementation) -
! 9: the wiki page describing the plan for how to support QUIC and HTTP/3 in curl
! 10: and libcurl.
! 11:
! 12: [quicwg.org](https://quicwg.org/) - home of the official protocol drafts
! 13:
! 14: ## QUIC libraries
! 15:
! 16: QUIC libraries we're experimenting with:
! 17:
! 18: [ngtcp2](https://github.com/ngtcp2/ngtcp2)
! 19:
! 20: [quiche](https://github.com/cloudflare/quiche)
! 21:
! 22: ## Experimental!
! 23:
! 24: HTTP/3 and QUIC support in curl is considered **EXPERIMENTAL** until further
! 25: notice. It needs to be enabled at build-time.
! 26:
! 27: Further development and tweaking of the HTTP/3 support in curl will happen in
! 28: in the master branch using pull-requests, just like ordinary changes.
! 29:
! 30: # ngtcp2 version
! 31:
! 32: ## Build with OpenSSL
! 33:
! 34: Build (patched) OpenSSL
! 35:
! 36: % git clone --depth 1 -b OpenSSL_1_1_1d-quic-draft-27 https://github.com/tatsuhiro-t/openssl
! 37: % cd openssl
! 38: % ./config enable-tls1_3 --prefix=<somewhere1>
! 39: % make
! 40: % make install_sw
! 41:
! 42: Build nghttp3
! 43:
! 44: % cd ..
! 45: % git clone https://github.com/ngtcp2/nghttp3
! 46: % cd nghttp3
! 47: % autoreconf -i
! 48: % ./configure --prefix=<somewhere2> --enable-lib-only
! 49: % make
! 50: % make install
! 51:
! 52: Build ngtcp2
! 53:
! 54: % cd ..
! 55: % git clone https://github.com/ngtcp2/ngtcp2
! 56: % cd ngtcp2
! 57: % autoreconf -i
! 58: % ./configure PKG_CONFIG_PATH=<somewhere1>/lib/pkgconfig:<somewhere2>/lib/pkgconfig LDFLAGS="-Wl,-rpath,<somewhere1>/lib" --prefix=<somewhere3>
! 59: % make
! 60: % make install
! 61:
! 62: Build curl
! 63:
! 64: % cd ..
! 65: % git clone https://github.com/curl/curl
! 66: % cd curl
! 67: % ./buildconf
! 68: % LDFLAGS="-Wl,-rpath,<somewhere1>/lib" ./configure --with-ssl=<somewhere1> --with-nghttp3=<somewhere2> --with-ngtcp2=<somewhere3> --enable-alt-svc
! 69: % make
! 70:
! 71: ## Build with GnuTLS
! 72:
! 73: Build (patched) GnuTLS
! 74:
! 75: % git clone --depth 1 -b tmp-quic https://gitlab.com/gnutls/gnutls.git
! 76: % cd gnutls
! 77: % ./bootstrap
! 78: % ./configure --disable-doc --prefix=<somewhere1>
! 79: % make
! 80: % make install
! 81:
! 82: Build nghttp3
! 83:
! 84: % cd ..
! 85: % git clone https://github.com/ngtcp2/nghttp3
! 86: % cd nghttp3
! 87: % autoreconf -i
! 88: % ./configure --prefix=<somewhere2> --enable-lib-only
! 89: % make
! 90: % make install
! 91:
! 92: Build ngtcp2
! 93:
! 94: % cd ..
! 95: % git clone https://github.com/ngtcp2/ngtcp2
! 96: % cd ngtcp2
! 97: % autoreconf -i
! 98: % ./configure PKG_CONFIG_PATH=<somewhere1>/lib/pkgconfig:<somewhere2>/lib/pkgconfig LDFLAGS="-Wl,-rpath,<somewhere1>/lib" --prefix=<somewhere3>
! 99: % make
! 100: % make install
! 101:
! 102: Build curl
! 103:
! 104: % cd ..
! 105: % git clone https://github.com/curl/curl
! 106: % cd curl
! 107: % ./buildconf
! 108: % ./configure --without-ssl --with-gnutls=<somewhere1> --with-nghttp3=<somewhere2> --with-ngtcp2=<somewhere3> --enable-alt-svc
! 109: % make
! 110:
! 111: # quiche version
! 112:
! 113: ## build
! 114:
! 115: Clone quiche and BoringSSL:
! 116:
! 117: % git clone --recursive https://github.com/cloudflare/quiche
! 118:
! 119: Build BoringSSL (it needs to be built manually so it can be reused with curl):
! 120:
! 121: % cd quiche/deps/boringssl
! 122: % mkdir build
! 123: % cd build
! 124: % cmake -DCMAKE_POSITION_INDEPENDENT_CODE=on ..
! 125: % make
! 126: % cd ..
! 127: % mkdir -p .openssl/lib
! 128: % cp build/crypto/libcrypto.a build/ssl/libssl.a .openssl/lib
! 129: % ln -s $PWD/include .openssl
! 130:
! 131: Build quiche:
! 132:
! 133: % cd ../..
! 134: % QUICHE_BSSL_PATH=$PWD/deps/boringssl cargo build --release --features pkg-config-meta
! 135:
! 136: Build curl:
! 137:
! 138: % cd ..
! 139: % git clone https://github.com/curl/curl
! 140: % cd curl
! 141: % ./buildconf
! 142: % ./configure LDFLAGS="-Wl,-rpath,$PWD/../quiche/target/release" --with-ssl=$PWD/../quiche/deps/boringssl/.openssl --with-quiche=$PWD/../quiche/target/release --enable-alt-svc
! 143: % make
! 144:
! 145: ## Run
! 146:
! 147: Use HTTP/3 directly:
! 148:
! 149: curl --http3 https://nghttp2.org:8443/
! 150:
! 151: Upgrade via Alt-Svc:
! 152:
! 153: curl --alt-svc altsvc.cache https://quic.aiortc.org/
! 154:
! 155: See this [list of public HTTP/3 servers](https://bagder.github.io/HTTP3-test/)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>