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.

See the changelog for a full release history.

§Feature flags

  • tracing — Enables tracing support
  • http1 (enabled by default) — Enables http1 support
  • http2 (enabled by default) — Enabled http2 support
  • http3 — Enables http3 support
  • tls-rustls — Enables tls via rustls
  • http3-tls-rustls — Alias for [“http3”, “tls-rustls”]
  • tower (enabled by default) — Enables tower service support
  • docs — Enables changelog and documentation of feature flags

§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.

§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");

§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

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.
changelog
Changelogs generated by scuffle_changelog

Structs§

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

Type Aliases§

IncomingRequest
An incoming request.

Re-exports§

pub use http;

Structs§

Response
Represents an HTTP response