Expand description
An extensible and efficient forward-thinking web server for the future.
Kvarn is a rethought web server tailored for the current needs from web application developers.
It handles several things for you, including
- Content-Type
- Compression of body
- Correct and performant HTTP/1 and HTTP/2
- Common API across HTTP/1 and HTTP/2
- Easy integration with HTTP/2 push promises
- Five types of extensions, all backed with intuitive macros
- Optional encryption with
rustls
- Several checks for illegal requests
cache-control
andkvarn-cache-control
header limits server cache lifetimes
Getting started
To get started, configure a RunConfig
. See the example at RunConfig::execute
on how to get a simple web server running.
A battle-tested reference implementation can be found at GitHub. It powers my two websites with minimal resource requirements.
Future plans
See the README @ GitHub and kvarn.org.
Re-exports
pub use error::default as default_error;
pub use error::default_response as default_error_response;
pub use extensions::Extensions;
pub use extensions::Id;
pub use read::file as read_file;
pub use read::file_cached as read_file_cached;
Modules
Abstractions for the application layer, providing a common interface for all HTTP versions supported.
Compress and cache.
Control the Kvarn server from the outside.
Encryption for incoming and outgoing traffic, implemented through streams.
Utility functions to generate error responses.
Here, all extensions code is housed.
Limits traffic from a IP address to partially mitigate attacks.
The Kvarn Prelude
Graceful shutdown for Kvarn.
Vary header handling in Kvarn.
Macros
Create a pinned future, compatible with crate::RetFut
.
The ultimate extension-creation macro.
Creates a super::ResponsePipeFuture
.
Creates a RunConfig
from PortDescriptor
s.
This allows you to configure the RunConfig
and then RunConfig::execute
the server.
Structs
The returned data from handle_cache
.
A Response
returned by handle_request()
.
Describes port, certificate, and host data for a single port to bind.
Configuration for Self::execute
.
This mainly consists of an array of PortDescriptor
s.
Enums
Which version of the Internet Protocol to bind to.
How to send data to the client.
Constants
The Kvarn server
header.
Can also be used for identifying the client when using
Kvarn as a reverse-proxy.
Functions
Will handle a single request, check the cache, process if needed, and caches it. This is where the response is sent.
Handles a single connection. This includes encrypting it, extracting the HTTP header information,
optionally (HTTP/2 & HTTP/3) decompressing them, and passing the request to handle_cache()
.
It will also recognize which host should handle the connection.
Handles a single request and returns response with cache and compress preference.
Type Definitions
The Request
used within Kvarn.