1# Alt-Svc
2
3curl features **EXPERIMENTAL** support for the Alt-Svc: HTTP header.
4
5## Experimental
6
7Experimental support in curl means:
8
91. Experimental features are provided to allow users to try them out and
10   provide feedback on functionality and API etc before they ship and get
11   "carved in stone".
122. You must enable the feature when invoking configure as otherwise curl will
13   not be built with the feature present.
143. We strongly advice against using this feature in production.
154. **We reserve the right to change behavior** of the feature without sticking
16   to our API/ABI rules as we do for regular features, as long as it is marked
17   experimental.
185. Experimental features are clearly marked so in documentation. Beware.
19
20## Enable Alt-Svc in build
21
22`./configure --enable-alt-svc`
23
24## Standard
25
26[RFC 7838](https://tools.ietf.org/html/rfc7838)
27
28## What works
29
30- read alt-svc file from disk
31- write alt-svc file from disk
32- parse `Alt-Svc:` response headers, including `ma`, `clear` and `persist`.
33- replaces old entries when new alternatives are received
34- unit tests to verify most of this functionality (test 1654)
35- act on `Alt-Svc:` response headers
36- build conditionally on `configure --enable-alt-svc` only, feature marked as
37  **EXPERIMENTAL**
38- implement `CURLOPT_ALTSVC_CTRL`
39- implement `CURLOPT_ALTSVC`
40- document  `CURLOPT_ALTSVC_CTRL`
41- document `CURLOPT_ALTSVC`
42- document `--alt-svc`
43- add `CURL_VERSION_ALTSVC`
44- make `curl -V` show 'alt-svc' as a feature if built-in
45- support `curl --alt-svc [file]` to enable caching, using that file
46- make `tests/runtests.pl` able to filter tests on the feature `alt-svc`
47- actually use the existing in-memory alt-svc cache for outgoing connections
48- alt-svc cache expiry
49- test 355 and 356 verify curl acting on Alt-Svc, received from header and
50  loaded from cache. The latter needs a debug build since it enables Alt-Svc
51  for plain HTTP.
52
53## What is left
54
55- handle multiple response headers, when one of them says `clear` (should
56  override them all)
57- using `Age:` value for caching age as per spec
58- `CURLALTSVC_IMMEDIATELY` support
59- `CURLALTSVC_ALTUSED` support
60