HTTP/2

Hypercorn is based on the excellent hyper-h2 library.

TLS settings

The recommendations in this documentation for the SSL/TLS ciphers and version are from RFC 7540. As required in the RFC ECDHE+AESGCM is the minimal cipher set HTTP/2 and TLSv2 the minimal TLS version servers should support. By default Hypercorn will use this as the cipher set.

ALPN Protocol

The ALPN Protocols should be set to include h2 and http/1.1 as Hypercorn supports both. It is feasible to omit one to only serve the other. If these aren’t set most clients will assume Hypercorn is a HTTP/1.1 only server. By default Hypercorn will set h2 and http/1.1 as the ALPN protocols.

No-TLS

Most clients, including all the web browsers only support HTTP/2 over TLS. Hypercorn, however, supports the h2c HTTP/1.1 to HTTP/2 upgrade process. This allows a client to send a HTTP/1.1 request with a Upgrade: h2c header that results in the connection being upgraded to HTTP/2. To test this try

$ curl --http2 http://url:port/path

Note that in the absence of either the upgrade header or an ALPN protocol Hypercorn will assume and treat the connection as HTTP/1.1.

HTTP/2 features

Hypercorn supports pipeling, flow control, and server push, it doesn’t (as yet) support prioritisation.