curl/docs
Stefan Eissing 962097b8dd
TLS: TLSv1.3 earlydata support for curl
Based on #14135, implement TLSv1.3 earlydata support for the curl
command line, libcurl and its implementation in GnuTLS.

If a known TLS session announces early data support, and the feature is
enabled *and* it is not a "connect-only" transfer, delay the TLS
handshake until the first request is being sent.

- Add --tls-earldata as new boolean command line option for curl.
- Add CURLSSLOPT_EARLYDATA to libcurl to enable use of the feature.
- Add CURLINFO_EARLYDATA_SENT_T to libcurl, reporting the amount of
  bytes sent and accepted/rejected by the server.

Implementation details:
- store the ALPN protocol selected at the SSL session.
- When reusing the session and enabling earlydata, use exactly
  that ALPN protocol for negoptiation with the server. When the
  sessions ALPN does not match the connections ALPN, earlydata
  will not be enabled.
- Check that the server selected the correct ALPN protocol for
  an earlydata connect. If the server does not confirm or reports
  something different, the connect fails.
- HTTP/2: delay sending the initial SETTINGS frames during connect,
  if not connect-only.

Verification:
- add test_02_32 to verify earlydata GET with nghttpx.
- add test_07_70 to verify earlydata PUT with nghttpx.
- add support in 'hx-download', 'hx-upload' clients for the feature

Assisted-by: ad-chaos on github
Closes #15211
2024-10-11 12:28:22 +02:00
..
cmdline-opts TLS: TLSv1.3 earlydata support for curl 2024-10-11 12:28:22 +02:00
examples build: tidy up deprecation suppression, enable warnings for clang 2024-09-21 00:59:52 +02:00
internals bufq: unwrite fix 2024-10-03 13:27:36 +02:00
libcurl TLS: TLSv1.3 earlydata support for curl 2024-10-11 12:28:22 +02:00
.gitignore docs: add RELEASE-TOOLS.md.dist to .gitignore 2024-07-01 22:49:55 +02:00
BINDINGS.md BINDINGS: add zig binding 2024-08-07 14:51:09 +02:00
BUG-BOUNTY.md BUG-BOUNTY.md: clarify the third party situation 2024-05-14 16:23:42 +02:00
BUGS.md reuse: add copyright + license info to individual docs/*.md files 2024-03-31 12:01:18 +02:00
CIPHERS-TLS12.md docs: update CIPHERS.md 2024-08-12 23:35:56 +02:00
CIPHERS.md docs: update CIPHERS.md 2024-08-12 23:35:56 +02:00
CMakeLists.txt cmake: more syntax tidy-up 2024-08-07 23:41:27 +02:00
CODE_OF_CONDUCT.md reuse: add copyright + license info to individual docs/*.md files 2024-03-31 12:01:18 +02:00
CODE_REVIEW.md docs: misc language polish 2024-07-01 16:45:17 +02:00
CONTRIBUTE.md CONTRIBUTE: polished 2024-08-26 15:04:01 +02:00
curl-config.md curldown: make 'added-in:' a mandatory header field 2024-07-18 18:04:09 +02:00
CURL-DISABLE.md WebSockets: make support official (non-experimental) 2024-09-27 13:20:25 +02:00
CURLDOWN.md curldown: fixups 2024-07-19 17:03:25 +02:00
DEPRECATE.md DEPRECATE: remove hyper in January 2025 2024-10-03 10:51:27 +02:00
DISTROS.md DISTROS: add AlmaLinux package source link 2024-07-11 12:52:58 -07:00
EARLY-RELEASE.md reuse: add copyright + license info to individual docs/*.md files 2024-03-31 12:01:18 +02:00
ECH.md ech: spelling, whitespace, say --ech default config 2024-10-07 12:31:21 +02:00
EXPERIMENTAL.md WebSockets: make support official (non-experimental) 2024-09-27 13:20:25 +02:00
FAQ tidy-up: OS names 2024-08-04 19:17:45 +02:00
FEATURES.md FEATURES.md: fix typo 2024-08-23 08:46:09 +02:00
GOVERNANCE.md reuse: add copyright + license info to individual docs/*.md files 2024-03-31 12:01:18 +02:00
HELP-US.md reuse: add copyright + license info to individual docs/*.md files 2024-03-31 12:01:18 +02:00
HISTORY.md tidy-up: spelling quiche and Rustls 2024-08-20 00:44:10 +02:00
HTTP3.md HTTP3.md: cleanup markup and language 2024-08-28 13:56:40 +02:00
HTTP-COOKIES.md reuse: add copyright + license info to individual docs/*.md files 2024-03-31 12:01:18 +02:00
INSTALL INSTALL: converted to markdown => INSTALL.md 2016-10-21 15:57:29 +02:00
INSTALL-CMAKE.md INSTALL-CMAKE.md: mention focus on shared libraries 2024-10-07 08:22:15 +02:00
INSTALL.md INSTALL.md: fix a typo that slipped in to RISC OS 2024-10-08 09:57:05 -07:00
INTERNALS.md tidy-up: OS names 2024-08-04 19:17:45 +02:00
IPFS.md reuse: add copyright + license info to individual docs/*.md files 2024-03-31 12:01:18 +02:00
KNOWN_BUGS KNOWN_BUGS: cleanup 2024-09-04 23:48:23 +02:00
MAIL-ETIQUETTE.md docs/MAIL-ETIQUETTE: convert to markdown 2024-03-31 15:32:27 +02:00
Makefile.am internals/SPLAY.md: internal API documentation 2024-08-16 17:13:37 +02:00
MANUAL.md MANUAL.md: wrap two example urls that overrun styling 2024-07-10 23:39:39 +02:00
mk-ca-bundle.md curldown: make 'added-in:' a mandatory header field 2024-07-18 18:04:09 +02:00
options-in-versions TLS: TLSv1.3 earlydata support for curl 2024-10-11 12:28:22 +02:00
README.md reuse: add copyright + license info to individual docs/*.md files 2024-03-31 12:01:18 +02:00
RELEASE-PROCEDURE.md RELEASE-PROCEDURE.md: restore next release date 2024-07-24 09:10:53 +02:00
ROADMAP.md CI: add whitespace checker 2024-06-27 13:33:30 +02:00
RUSTLS.md vtls/rustls: support strong CSRNG data 2024-09-13 14:11:56 +02:00
SECURITY-ADVISORY.md reuse: add copyright + license info to individual docs/*.md files 2024-03-31 12:01:18 +02:00
SPONSORS.md reuse: add copyright + license info to individual docs/*.md files 2024-03-31 12:01:18 +02:00
SSL-PROBLEMS.md reuse: add copyright + license info to individual docs/*.md files 2024-03-31 12:01:18 +02:00
SSLCERTS.md curl: add options for safe/no CA bundle search (Windows) 2024-09-22 18:17:25 +02:00
THANKS THANKS: cleanup duplicates 2024-09-25 09:54:09 +02:00
THANKS-filter THANKS: cleanup duplicates 2024-09-25 09:54:09 +02:00
TheArtOfHttpScripting.md code: language cleanup in comments 2024-07-01 22:58:55 +02:00
TODO codespell: extend checks to more subdirs 2024-09-27 10:27:08 +02:00
URL-SYNTAX.md tidy-up: misc spelling (bit, ASCII) 2024-08-15 15:30:09 +02:00
VERSIONS.md reuse: add copyright + license info to individual docs/*.md files 2024-03-31 12:01:18 +02:00
VULN-DISCLOSURE-POLICY.md VULN-DISCLOSURE-POLICY.md: small typo fix 2024-08-05 17:15:31 +02:00

curl logo

Documentation

You find a mix of various documentation in this directory and subdirectories, using several different formats. Some of them are not ideal for reading directly in your browser.

If you would rather see the rendered version of the documentation, check out the curl website's documentation section for general curl stuff or the libcurl section for libcurl related documentation.