hreq-h1

An asynchronous HTTP/1 server and client implemenation.

This library provides the lower level parts of the HTTP/1.1 (and 1.0) spec. Specifically it concerns sending/receiving http requests and bodies over some unnamed transport. Which async runtime to use, TCP and TLS are handled outside this library.

Since HTTP/1.1 has no multiplexing, the HTTP headers Content-Length and Transfer-Encoding are handled/enforced by this library to be able to correctly delinate where a request starts/ends over the transport.

In scope

Out of scope

Basically everything which isn't about HTTP as "transport", i.e. application level logic.

Layout and API

The API tries to closely follow that of [h2] so that a user of the library can make uniform handling of both HTTP/1.1 and HTTP/2.0.

There are separate [client] and [server] modules and code that is shared between them lives in the crate root.

Handshake

Some connection must already have been established between client and server, this library does not perform socket connection.

In HTTP/1.1 there is no "handshake" like in HTTP/2.0, but to be congruent with [h2], the entry points for starting a connection are [client::handshake] and [server::handshake].