curl/docs/libcurl
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
..
opts TLS: TLSv1.3 earlydata support for curl 2024-10-11 12:28:22 +02:00
.gitignore gitignore: the generated libcurl-symbols.md 2024-01-25 16:34:06 +01:00
ABI.md docs: use present tense 2024-02-27 09:47:21 +01:00
CMakeLists.txt cmake: use host OS to decide about libcurl manpage batch size 2024-08-30 10:09:01 +02:00
curl_easy_cleanup.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_easy_duphandle.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_easy_escape.md curl_easy_escape.md: move historic details to HISTORY 2024-07-23 11:24:19 +02:00
curl_easy_getinfo.md TLS: TLSv1.3 earlydata support for curl 2024-10-11 12:28:22 +02:00
curl_easy_header.md curl_easy_handler.md: fix language 2024-09-02 10:45:12 +02:00
curl_easy_init.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_easy_nextheader.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_easy_option_by_id.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_easy_option_by_name.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_easy_option_next.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_easy_pause.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_easy_perform.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_easy_recv.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_easy_reset.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_easy_send.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_easy_setopt.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_easy_strerror.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_easy_unescape.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_easy_upkeep.md easy: fix curl_easy_upkeep for shared connection caches 2024-08-04 18:41:18 -04:00
curl_escape.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_formadd.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_formfree.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_formget.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_free.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_getdate.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_getenv.md tidy-up: OS names 2024-08-04 19:17:45 +02:00
curl_global_cleanup.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_global_init_mem.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_global_init.md tidy-up: OS names 2024-08-04 19:17:45 +02:00
curl_global_sslset.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_global_trace.md smtp: add tracing feature 2024-08-14 11:51:55 +02:00
curl_mime_addpart.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_mime_data_cb.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_mime_data.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_mime_encoder.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_mime_filedata.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_mime_filename.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_mime_free.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_mime_headers.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_mime_init.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_mime_name.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_mime_subparts.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_mime_type.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_mprintf.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_multi_add_handle.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_multi_assign.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_multi_cleanup.md docs/libcurl: expand multi documentation 2024-10-01 15:17:17 +02:00
curl_multi_fdset.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_multi_get_handles.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_multi_info_read.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_multi_init.md docs/libcurl: expand multi documentation 2024-10-01 15:17:17 +02:00
curl_multi_perform.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_multi_poll.md docs: fix some examples in man pages 2024-08-23 09:00:08 -07:00
curl_multi_remove_handle.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_multi_setopt.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_multi_socket_action.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_multi_socket_all.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_multi_socket.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_multi_strerror.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_multi_timeout.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_multi_wait.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_multi_waitfds.md docs: fix some examples in man pages 2024-08-23 09:00:08 -07:00
curl_multi_wakeup.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_pushheader_byname.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_pushheader_bynum.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_share_cleanup.md docs/libcurl: add to cleanup docs that their inputs go invalid 2024-07-23 11:18:46 +02:00
curl_share_init.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_share_setopt.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_share_strerror.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_slist_append.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_slist_free_all.md docs/libcurl: add to cleanup docs that their inputs go invalid 2024-07-23 11:18:46 +02:00
curl_strequal.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_strnequal.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_unescape.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_url_cleanup.md docs/libcurl: add to cleanup docs that their inputs go invalid 2024-07-23 11:18:46 +02:00
curl_url_dup.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_url_get.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_url_set.md curl_url_set.md: document HOST handling when URL is parsed 2024-09-18 15:02:45 +02:00
curl_url_strerror.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_url.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_version_info.md tidy-up: misc spelling (bit, ASCII) 2024-08-15 15:30:09 +02:00
curl_version.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_ws_meta.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_ws_recv.md curldown: fixups 2024-07-19 17:03:25 +02:00
curl_ws_send.md websocket: introduce blocking sends 2024-08-12 19:19:28 +02:00
libcurl-easy.md curldown: make 'added-in:' a mandatory header field 2024-07-18 18:04:09 +02:00
libcurl-env-dbg.md NTLM_WB: delete remains in tests, docs updates 2024-09-10 14:13:36 +02:00
libcurl-env.md tidy-up: spelling quiche and Rustls 2024-08-20 00:44:10 +02:00
libcurl-errors.md curldown: make 'added-in:' a mandatory header field 2024-07-18 18:04:09 +02:00
libcurl-multi.md curldown: make 'added-in:' a mandatory header field 2024-07-18 18:04:09 +02:00
libcurl-security.md NTLM_WB: delete remains in tests, docs updates 2024-09-10 14:13:36 +02:00
libcurl-share.md curldown: make 'added-in:' a mandatory header field 2024-07-18 18:04:09 +02:00
libcurl-thread.md tidy-up: URL updates 2024-07-30 21:27:12 +02:00
libcurl-tutorial.md tidy-up: misc spelling (bit, ASCII) 2024-08-15 15:30:09 +02:00
libcurl-url.md curldown: make 'added-in:' a mandatory header field 2024-07-18 18:04:09 +02:00
libcurl-ws.md curldown: make 'added-in:' a mandatory header field 2024-07-18 18:04:09 +02:00
libcurl.m4 misc: Fix typos in docs and lib 2024-03-01 09:59:48 +01:00
libcurl.md tidy-up: OS names 2024-08-04 19:17:45 +02:00
Makefile.am docs: dist curl*.1 and install without perl 2024-02-20 10:35:13 +01:00
Makefile.inc lib: add curl_multi_waitfds 2024-04-09 16:53:40 +02:00
mksymbolsmanpage.pl curldown: make 'added-in:' a mandatory header field 2024-07-18 18:04:09 +02:00
symbols-in-versions TLS: TLSv1.3 earlydata support for curl 2024-10-11 12:28:22 +02:00
symbols.pl docs: remove use of the word 'very' 2023-09-07 22:52:07 +02:00