rust-web-server 17.1.0

rust-web-server (rws) is a static content web-server written in Rust
rust-web-server-17.1.0 is not a library.
Visit the last successful build: rust-web-server-17.46.0

rws

Static file web server written in Rust. Supports HTTP/3, HTTP/2, and HTTP/1.1. HTTP/3 and HTTP/2 require a TLS certificate; without one the server falls back to plain HTTP/1.1 automatically.

Install

cargo install rust-web-server

This installs the rws binary with HTTP/3, HTTP/2, and TLS support included.

Run

Plain HTTP/1.1

rws

Starts on http://127.0.0.1:7878 by default. Place your files in the working directory and open the URL in a browser.

HTTPS + HTTP/2 + HTTP/3

Generate a self-signed certificate for local development:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes \
  -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1"

Start the server with the certificate:

rws --tls-cert-file=cert.pem --tls-key-file=key.pem

Open https://127.0.0.1:7878 in a browser. The server listens on the same port for both TCP (HTTP/1.1 and HTTP/2 via ALPN) and UDP (HTTP/3 via QUIC). HTTP/2 and HTTP/3 are negotiated automatically — no extra configuration needed.

For a public domain, obtain a certificate from Let's Encrypt.

Custom address and port

rws --ip=0.0.0.0 --port=443 --tls-cert-file=cert.pem --tls-key-file=key.pem

See CONFIGURE for all configuration options (env vars, config file, command-line flags).

Build from source

git clone https://github.com/bohdaq/rust-web-server.git
cd rust-web-server
cargo build --release

The binary is at target/release/rws.

To build with HTTP/2 only (no QUIC/HTTP/3):

cargo build --release --no-default-features --features http2

To build HTTP/1.1 only (smallest binary, no TLS):

cargo build --release --no-default-features --features http1

Features

  • HTTP/3 over QUIC (UDP) — negotiated via Alt-Svc
  • HTTP/2 with ALPN negotiation alongside HTTP/1.1 on the same TCP port
  • TLS via rustls (aws-lc-rs backend, no OpenSSL)
  • CORS — allowed for all origins by default, fully configurable
  • HTTP Range Requests — partial file serving and multi-range responses
  • HTTP Client Hints
  • X-Content-Type-Options: nosniff and X-Frame-Options headers
  • Symlink resolution
  • .html extension inference — /page serves page.html; /dir serves dir/index.html
  • No caching headers — files are always served fresh
  • Request/response logging to stdout

Further reading

  • CONFIGURE — all configuration options
  • FAQ — common problems and solutions
  • DEVELOPER — building, testing, and contributing
  • src/README.md — module-level documentation