#web #web-server #server

nightly app wesers

用Rust编写的简单HTTP/HTTPS服务器

6个版本 (3个重大变更)

使用旧的Rust 2015

0.4.1 2016年8月3日
0.4.0 2016年8月3日
0.3.1 2016年7月9日
0.2.0 2016年7月7日
0.1.0 2016年7月7日

#367 in #web-server

Download history 8/week @ 2024-07-04 47/week @ 2024-07-25

55 每月下载次数

AGPL-3.0

2.5MB
623

包含 (ELF exe/lib, 3.5MB) wesers

wesers - 用Rust编写的简单HTTP/HTTPS服务器

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

需要请求时间和HTTP版本

目录

安装

(您需要使用nightly编译,现在)

如果您想从源代码构建,请确保您正在使用nightly工具链!

不支持HTTPS

使用以下方法安装

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

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

如果您想下载预构建的二进制文件,可以访问GitHub的发布页面

支持HTTPS

使用以下方法安装

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

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

用法

$ wesers --help
wesers 0.4.1
Chiu-Hsiang Hsu <[email protected]>
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

运行

$ 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)

使用自定义地址和HTML模板运行

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

以HTTPS运行

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

二进制大小

x86_64 Linux

文件名 版本 剥离? 大小(字节) 大小(MB)
wesers v0.4.1 3573904 3.5M
wesers v0.4.1 2769832 2.7M

基准测试

这是一个通过Herd(只是一个简单的测试,并不能说明很多)进行的简单负载测试

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

变更日志

尚未实现(计划)

  • 更多文件信息(类型、大小、最后修改时间)
  • 更多文档
  • 二维码支持
  • 可选用户目录
  • 支持限制请求次数
  • 文件和目录的RESTful API
  • 可以作为CGI服务器运行
  • 模板实时刷新
  • 处理POST上传文件
  • Android支持
  • 更多模板引擎支持
  • 修复所有由linter(例如clippy)发现的错误
  • 代码重构以提高性能
  • 减少二进制大小
  • Unicode URL支持(问题https://github.com/iron/staticfile/issues/76
  • HTTP2支持

v0.4.1 (2016-08-03)

修复
  • HTTPS构建

v0.4.0 (2016-08-03)

特性
  • 记录客户端IP
  • 更新所有依赖项

v0.3.1 (2016-07-09)

修复
  • 使HTTPS可选(因为OpenSSL的依赖关系)

v0.3.0 (2016-07-08)

特性
  • 支持自定义HTML模板(使用mustache
  • 支持自定义根目录
  • 支持HTTPS(使用OpenSSL)

v0.2.0 (2016-07-08)

特性
  • 使用clap的Bash完成
  • 可选的index.html检测
  • 更好地处理404错误

v0.1.0 (2016-07-07)

特性
  • 提供静态文件服务
  • 列出目录中的文件

注意

我仅在x86_64 Linux上进行了测试。其他平台由CI构建。如果它们不能正常工作,请告诉我。

开发

发布制作

  1. src/arguments.yml
  2. Cargo.toml
  3. Cargo.lock
  4. 添加git标签

共享库依赖

x86_64, Linux, 不使用HTTPS

$ 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, 使用HTTPS

$ 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, 不使用HTTPS

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

x86_64, Linux, musl, 使用HTTPS

$ 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)

特别感谢

许可

wesers遵循AGPL许可协议 - 详细信息请参阅LICENSE文件

依赖

~5.5–7.5MB
~165K SLoC