Rust MIT

simple-http-server

Simple http server in Rust (Windows/Mac/Linux)

T

TheWaWaR

Dernière activité 27 août 2026
TheWaWaR/simple-http-server

3,5 k

étoiles

217

forks

44

issues ouvertes

filehttprustserversimplehttpserverstatic

Ce README est souvent en anglais.

Simple HTTP Server

Simple static file server with directory listing, upload, basic auth, range requests, compression, CORS, SPA fallback, and optional PKCS#12 HTTPS support.

The current implementation is based on axum/tokio. TLS support is behind the tls feature and is disabled by default so the default binary stays smaller.

Screenshot

Installation

Default build:

cargo install simple-http-server

With PKCS#12 HTTPS support:

cargo install simple-http-server --features tls

Usage

Usage: simple-http-server [OPTIONS] [root]

Arguments:
  [root]  Root directory

Options:
  -i, --index                     Enable automatic render index page [index.html, index.htm]
  -u, --upload                    Enable upload files. (multiple select) (CSRF token required)
      --csrf <TOKEN>              Use a custom CSRF token for upload. WARNING: this is dangerous as the token is passed via the command line and may be visible in process listings
      --redirect <URL>            takes a URL to redirect to using HTTP 301 Moved Permanently
      --nosort                    Disable directory entries sort (by: name, modified, size)
      --nocache                   Disable http cache
      --norange                   Disable header::Range support (partial request)
      --cert <FILE>               TLS/SSL certificate (pkcs#12 format, requires tls feature)
      --cors                      Enable CORS via the "Access-Control-Allow-Origin" header
      --coop                      Add "Cross-Origin-Opener-Policy" HTTP header and set it to "same-origin"
      --coep                      Add "Cross-Origin-Embedder-Policy" HTTP header and set it to "require-corp"
      --certpass <PASSWORD>       TLS/SSL certificate password (requires tls feature)
  -l, --upload-size-limit <SIZE>  Upload file size limit [bytes, or K/M/G/T suffix interpreted with powers of 1024, such as 30K, 50M, 1G] [default: 8M]
      --ip <IP>                   IP address to bind [default: 0.0.0.0]
  -p, --port <PORT>               Port number [default: 8000]
  -a, --auth <USER:PASS>          HTTP Basic Auth (username:password)
  -c, --compress <EXT>...         Enable file compression: gzip/deflate
                                  Example: -c=js,d.ts
                                  Note: disabled on partial request!
  -t, --threads <NUM>             How many worker threads [default: 3]
      --try-file <PATH>           Serve this file in place of missing paths. Relative paths are resolved against the server root; absolute paths are used as-is. [aliases: --try-file-404]
  -s, --silent                    Disable all outputs
  -o, --open                      Open the page in the default browser
  -b, --base-url <PATH>           Base URL prefix for directory indexes and upload redirects. It is normalized to start with '/' and to end with '/' when not root. [default: /]
  -h, --help                      Print help
  -V, --version                   Print version

Examples

Serve a folder:

simple-http-server -i public

Enable upload and raise the upload limit:

simple-http-server -u -l 50M .

Serve an SPA fallback file:

simple-http-server --try-file dist/index.html dist

Run behind a reverse proxy that strips /static/ before forwarding:

simple-http-server --base-url /static/ .

HTTPS Example

--cert expects a PKCS#12 file such as .p12 or .pfx. PEM files are not accepted directly.

1. Generate a local certificate and .p12

mkdir -p /tmp/simple-http-server-tls
cd /tmp/simple-http-server-tls

openssl req \
  -x509 \
  -newkey rsa:2048 \
  -nodes \
  -sha256 \
  -keyout key.pem \
  -out cert.pem \
  -days 7 \
  -subj "/CN=localhost" \
  -addext "subjectAltName=DNS:localhost"

openssl pkcs12 \
  -export \
  -inkey key.pem \
  -in cert.pem \
  -out localhost.p12 \
  -passout pass:changeit

2. Start the server

simple-http-server \
  -i \
  --ip 127.0.0.1 \
  --port 8443 \
  --cert /tmp/simple-http-server-tls/localhost.p12 \
  --certpass changeit \
  .

3. Verify it

Strict verification:

curl --fail --silent --show-error \
  --cacert /tmp/simple-http-server-tls/cert.pem \
  https://localhost:8443/

Quick local smoke test:

curl -kI https://localhost:8443/

Features

  • Directory listing with breadcrumb navigation
  • Optional index.html / index.htm rendering
  • File upload with CSRF protection
  • HTTP Basic Auth
  • HTTP cache control with Last-Modified and ETag
  • Single-range partial content support
  • gzip / deflate compression
  • CORS plus COOP / COEP headers
  • SPA fallback via --try-file
  • Optional PKCS#12 HTTPS via the tls feature

Projets similaires

Simple and configurable command-line HTTP server

Rustclifilehttp
Hhttp-server-rs
212 étoiles22

A simple static HTTP server in Rust, for learning and local doc development

Rust
Bbrson
401 étoiles52

A cross-platform, high-performance and asynchronous web server for static files-serving. ⚡

Rustalpine-linuxamd64android
Sstatic-web-server
2,4 k étoiles133