aioquic
aioquic
?
What is aioquic
is a library for the QUIC network protocol in Python. It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.
QUIC was standardised in RFC 9000, but HTTP/3 standardisation is still ongoing. aioquic
closely tracks the specification drafts and is regularly tested for interoperability against other QUIC implementations.
To learn more about aioquic
please read the documentation.
aioquic
?
Why should I use aioquic
has been designed to be embedded into Python client and server libraries wishing to support QUIC and / or HTTP/3. The goal is to provide a common codebase for Python libraries in the hope of avoiding duplicated effort.
Both the QUIC and the HTTP/3 APIs follow the "bring your own I/O" pattern, leaving actual I/O operations to the API user. This approach has a number of advantages including making the code testable and allowing integration with different concurrency models.
Features
- QUIC stack conforming with RFC 9000
- HTTP/3 stack conforming with draft-ietf-quic-http-34
- minimal TLS 1.3 implementation
- IPv4 and IPv6 support
- connection migration and NAT rebinding
- logging TLS traffic secrets
- logging QUIC events in QLOG format
- HTTP/3 server push support
Requirements
aioquic
requires Python 3.7 or better, and the OpenSSL development headers.
Linux
On Debian/Ubuntu run:
$ sudo apt install libssl-dev python3-dev
On Alpine Linux you will also need the following:
$ sudo apt install bsd-compat-headers libffi-dev
OS X
On OS X run:
$ brew install openssl
You will need to set some environment variables to link against OpenSSL:
$ export CFLAGS=-I/usr/local/opt/openssl/include
$ export LDFLAGS=-L/usr/local/opt/openssl/lib
Windows
On Windows the easiest way to install OpenSSL is to use Chocolatey.
> choco install openssl
You will need to set some environment variables to link against OpenSSL:
> $Env:INCLUDE = "C:\Progra~1\OpenSSL-Win64\include"
> $Env:LIB = "C:\Progra~1\OpenSSL-Win64\lib"
Running the examples
aioquic comes with a number of examples illustrating various QUIC usecases.
You can browse these examples here: https://github.com/aiortc/aioquic/tree/main/examples
License
aioquic
is released under the BSD license.