2020-12-14 16:10:32 +03:00
|
|
|
# Hyper
|
|
|
|
|
|
|
|
Hyper is a separate HTTP library written in Rust. curl can be told to use this
|
|
|
|
library as a backend to deal with HTTP.
|
|
|
|
|
|
|
|
## Experimental!
|
|
|
|
|
|
|
|
Hyper support in curl is considered **EXPERIMENTAL** until further notice. It
|
|
|
|
needs to be explicitly enabled at build-time.
|
|
|
|
|
|
|
|
Further development and tweaking of the Hyper backend support in curl will
|
|
|
|
happen in in the master branch using pull-requests, just like ordinary
|
|
|
|
changes.
|
|
|
|
|
|
|
|
## Hyper version
|
|
|
|
|
|
|
|
The C API for Hyper is brand new and under development. This description
|
|
|
|
assumes that you get and build that C API off [the branch in Hyper's git
|
|
|
|
repository](https://github.com/hyperium/hyper/tree/hyper-capi).
|
|
|
|
|
|
|
|
## build curl with hyper
|
|
|
|
|
|
|
|
Build hyper and enable the C API:
|
|
|
|
|
|
|
|
% git clone -b hyper-capi https://github.com/hyperium/hyper
|
|
|
|
% cd hyper
|
2021-01-06 02:50:49 +03:00
|
|
|
% RUSTFLAGS="--cfg hyper_unstable_ffi" cargo build --features client,http1,http2,ffi
|
2020-12-14 16:10:32 +03:00
|
|
|
|
|
|
|
Build curl to use hyper's C API:
|
|
|
|
|
|
|
|
% git clone https://github.com/curl/curl
|
|
|
|
% cd curl
|
|
|
|
% ./buildconf
|
|
|
|
% ./configure --with-hyper=<hyper dir>
|
|
|
|
% make
|
|
|
|
|
|
|
|
# using Hyper internally
|
|
|
|
|
|
|
|
Hyper is a low level HTTP transport library. curl itself provides all HTTP
|
|
|
|
headers and Hyper provides all received headers back to curl.
|
|
|
|
|
|
|
|
Therefore, msost of the "header logic" in curl as in responding to and acting
|
|
|
|
on specific input and output headers are done the same way in curl code.
|
|
|
|
|
|
|
|
The API in Hyper delivers received HTTP headers as (cleaned up) name=value
|
|
|
|
pairs, making it impossible for curl to know the exact byte representation
|
|
|
|
over the wire with Hyper.
|
2021-01-02 13:42:27 +03:00
|
|
|
|
|
|
|
## Remaining issues
|
|
|
|
|
|
|
|
This backend is still not feature complete with the native backend. Areas that
|
|
|
|
still need attention and verification include:
|
|
|
|
|
|
|
|
- multiplexed HTTP/2
|
|
|
|
- h2 Upgrade:
|
|
|
|
- pausing transfers
|
|
|
|
- co-exist with a HTTP/3 build
|
|
|
|
- receiving HTTP/1 trailers
|
|
|
|
- sending HTTP/1 trailers
|
|
|
|
- accept-encoding
|
|
|
|
- transfer encoding
|
|
|
|
- alt-svc
|
|
|
|
- hsts
|
|
|
|
- DoH ([#6389](https://github.com/curl/curl/issues/6389))
|