Crate scuffle_http

Source
Expand description

An HTTP server with support for HTTP/1, HTTP/2 and HTTP/3.

It abstracts away hyper and h3 to provide a rather simple interface for creating and running a server that can handle all three protocols.

See the examples directory for usage examples.

§Why do we need this?

This crate is designed to be a simple and easy to use HTTP server that supports HTTP/1, HTTP/2 and HTTP/3.

Currently, there are simply no other crates that provide support for all three protocols with a unified API. This crate aims to fill that gap.

§Feature Flags

  • tower: Enables support for tower services. Enabled by default.
  • http1: Enables support for HTTP/1. Enabled by default.
  • http2: Enables support for HTTP/2. Enabled by default.
  • http3: Enables support for HTTP/3. Disabled by default.
  • tracing: Enables logging with tracing. Disabled by default.
  • tls-rustls: Enables support for TLS with rustls. Disabled by default.
  • http3-tls-rustls: Enables both http3 and tls-rustls features. Disabled by default.

§Example

The following example demonstrates how to create a simple HTTP server (without TLS) that responds with “Hello, world!” to all requests on port 3000.

let service = scuffle_http::service::fn_http_service(|req| async move {
    scuffle_http::Response::builder()
        .status(scuffle_http::http::StatusCode::OK)
        .header(scuffle_http::http::header::CONTENT_TYPE, "text/plain")
        .body("Hello, world!".to_string())
});
let service_factory = scuffle_http::service::service_clone_factory(service);

scuffle_http::HttpServer::builder()
    .service_factory(service_factory)
    .bind("[::]:3000".parse().unwrap())
    .build()
    .run()
    .await
    .expect("server failed");

§Status

This crate is currently under development and is not yet stable.

§Missing Features

  • HTTP/3 webtransport support
  • Upgrading to websocket connections from HTTP/3 connections (this is usually done via HTTP/1.1 anyway)

§License

This project is licensed under the MIT or Apache-2.0 license. You can choose between one of them if you use this work.

SPDX-License-Identifier: MIT OR Apache-2.0

Re-exports§

pub use http;

Modules§

backendhttp1 or http2 or http3
This module contains the underlying backends for the server.
body
Types for working with HTTP bodies.
error
Error types.
service
HTTP service and service factory traits.

Structs§

HttpServer
The HTTP server.
HttpServerBuilder
Use builder syntax to set the inputs and finish with build().
Response
Represents an HTTP response

Type Aliases§

IncomingRequest
An incoming request.