===========================================

wesers - a simple HTTP/HTTPS server in Rust

// 127.0.0.1 - - [03/Aug/2016 12:15:30] "GET /favicon.ico HTTP/1.1" 404 -

need request time, HTTP version

.. contents:: Table of Contents

Installation

(You need to compile with nightly, now)

If you want to build from source, cargo install wesers may not work. (As it don't look Cargo.lock currently)

Install with

.. code-block:: sh

cargo install --git https://github.com/wdv4758h/wesers

or

.. code-block:: sh

cargo install --git https://github.com/wdv4758h/wesers --tag v0.3.1

If you want to download prebuilt binary, you can visit GitHub's release page <https://github.com/wdv4758h/wesers/releases>_

Usage

.. code-block:: sh

$ wesers --help
wesers 0.4.0
Chiu-Hsiang Hsu <wdv4758h@gmail.com>
a simple HTTP/HTTPS server in Rust

USAGE:
    wesers [FLAGS] [OPTIONS]

FLAGS:
    -h, --help       Prints help information
        --https      use HTTPS instead of HTTP
    -V, --version    Prints version information

OPTIONS:
        --cert <cert>            SSL certificate file (needed for HTTPS)
        --index <index>          auto detect index.html [default: true]
        --ip <ip>                binding IP [default: 127.0.0.1]
        --key <key>              SSL key file (needed for HTTPS)
        --port <port>            binding port [default: 8000]
        --root <root>            root directory [default: .]
        --template <template>    HTML template path

.. code-block:: sh

$ wesers
Simple HTTP Server running on http://127.0.0.1:8000/
127.0.0.1:54400 GET http://127.0.0.1:8000/ -> 200 OK (0.268528 ms)

.. code-block:: sh

$ wesers --ip 127.0.0.1 --port 8080 --template ./custom.mustache
Simple HTTP Server running on http://127.0.0.1:8080/

.. code-block:: sh

$ wesers --https --cert mycert.pem --key mykey.pem
Simple HTTP Server running on https://127.0.0.1:8000/

Binary Size

x86_64 Linux:

+----------+---------+------------+--------------+-----------+ | Filename | Version | Stripped ? | Size (Bytes) | Size (MB) | +----------+---------+------------+--------------+-----------+ | wesers | v0.4.0 | No | 3573904 | 3.5M | +----------+---------+------------+--------------+-----------+ | wesers | v0.4.0 | Yes | 2769832 | 2.7M | +----------+---------+------------+--------------+-----------+

Benchmarks

This is a simple load testing by Herd <https://github.com/imjacobclark/Herd>_ (Just a simple test, not indicate a lot)

.. code-block:: sh

# Running both herd and wesers on Intel Core i5-2400 with 4GB RAM
$ ./target/release/herd -t 4 -r 1000 http://127.0.0.1:8000

...
Spawning virtual user 1
...
Spawning virtual user 3
...
I made a total of 4000 requests, the mean response time was: 0.00042591915919911117 seconds.

Changelog

Not Implemented Yet (Plan)

v0.4.0 (2016-08-03)

Features ++++++++++++++++++++

v0.3.1 (2016-07-09)

Fix ++++++++++++++++++++

v0.3.0 (2016-07-08)

Features ++++++++++++++++++++

v0.2.0 (2016-07-08)

Features ++++++++++++++++++++

v0.1.0 (2016-07-07)

Features ++++++++++++++++++++

Notice

I've only tested on my x86_64 Linux. Other platforms are built by CI. If they don't work properly, please tell me.

Developement

Making Release

  1. update version in src/arguments.yml
  2. update version in Cargo.toml
  3. update version in Cargo.lock
  4. add git tag

Dependency of Shared Libraries

x86_64, Linux, no HTTPS

.. code-block:: sh

$ ldd ./target/release/wesers
        linux-vdso.so.1 (0x00007fff05f4c000)
        libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f1531e71000)
        libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f1531c54000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f1531a3e000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007f153169d000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f1532075000)

x86_64, Linux, with HTTPS

.. code-block:: sh

$ ldd ./target/release/wesers
        linux-vdso.so.1 (0x00007fffdbe85000)
        libssl.so.1.0.0 => /usr/lib/libssl.so.1.0.0 (0x00007f168b810000)
        libcrypto.so.1.0.0 => /usr/lib/libcrypto.so.1.0.0 (0x00007f168b399000)
        libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f168b195000)
        libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f168af78000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f168ad62000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007f168a9c1000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f168ba81000)

x86_64, Linux, musl, no HTTPS

.. code-block:: sh

$ ldd ./target/x86_64-unknown-linux-musl/release/wesers
        not a dynamic executable

x86_64, Linux, musl, with HTTPS

.. code-block:: sh

$ ldd ./target/x86_64-unknown-linux-musl/release/wesers
        linux-vdso.so.1 (0x00007ffc55496000)
        libssl.so.1.0.0 => /usr/lib/libssl.so.1.0.0 (0x00007f69cb9c8000)
        libcrypto.so.1.0.0 => /usr/lib/libcrypto.so.1.0.0 (0x00007f69cb551000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007f69cb1b0000)
        libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f69cafac000)
        /lib/ld64.so.1 (0x00007f69cbc39000)

Special Thanks

License

wesers is licensed under the AGPL License - see the LICENSE file for details