#http-request #http-response #handle #requests #connection #error

http-handle

A fast and lightweight Rust library for handling HTTP requests and responses

2 releases

0.0.2 Oct 13, 2024
0.0.1 Oct 13, 2024

#286 in HTTP server

Download history 182/week @ 2024-10-07 168/week @ 2024-10-14 77/week @ 2024-10-21

427 downloads per month
Used in staticdatagen

MIT/Apache

68KB
803 lines

Http Handle logo

HTTP Handle (http-handle)

A Rust-based HTTP server for serving static websites.

Made With Love Crates.io lib.rs Docs.rs Codecov Build Status GitHub

WebsiteDocumentationReport BugRequest FeatureContributing Guidelines

Overview

The http-handle is a robust Rust library designed for serving static websites. It provides a simple yet efficient HTTP server implementation with features like request parsing, response generation, and basic security measures. The library is not intended to be a full-fledged web server but rather a lightweight solution for serving static files over HTTP for development and testing purposes.

Features

  • Static File Serving: Serve static files from a configured document root.
  • Request Parsing: Parse incoming HTTP requests with proper error handling.
  • Response Generation: Generate appropriate HTTP responses based on requests.
  • Security Measures: Prevent directory traversal attacks.
  • Content Type Detection: Automatically detect and set appropriate content types for files.
  • Customizable 404 Handling: Support for custom 404 error pages.
  • Threaded Connections: Handle multiple connections concurrently using threads.
  • Configurable Server: Easy configuration of server address and document root.

Installation

Add this to your Cargo.toml:

[dependencies]
http-handle = "0.0.2"

Usage

Here's a basic example of how to use http-handle:

use http_handle::Server;
use std::thread;
use std::time::Duration;

fn main() -> std::io::Result<()> {
    // Create a new server with an address and document root
    let server = Server::new("127.0.0.1:8080", "./public");

    // Run the server in a separate thread so it doesn't block
    let server_handle = thread::spawn(move || {
        server.start().expect("Server failed to start");
    });

    // Let the server run for 2 seconds before shutting it down
    thread::sleep(Duration::from_secs(2));

    println!("Server has been running for 2 seconds, shutting down...");
    
    // In a real-world scenario, you would need to implement a proper shutdown signal
    // This just exits the program after the duration.
    
    Ok(())
}

This will start a server listening on 127.0.0.1:8080, serving files from the ./public directory.

Documentation

For full API documentation, please visit docs.rs/http-handle.

Examples

To explore more examples, clone the repository and run the following command:

cargo run --example example_name

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under either of

at your option.

Acknowledgements

Special thanks to all contributors who have helped build the http-handle library.

Dependencies

~0.9–2MB
~40K SLoC