SRV 开发服务器

起因

我之前在学习 HTML/CSS/JavaScript 的时候,总想着有没有一个这样的命令,它可以用一行 Bash 开启一个静态资源服务器,并且能帮我打开浏览器。

我找了很久,用过了 Node 的 http-server 包,可惜是 Node, 因为版本问题我在其他电脑上用时总得先配置一下 Node 环境

Python 的 http.server 模块看起来也不错,但界面 emmmmmmm, 而且不是所有机子都有 Python

然后我更明确了要求:要单文件,体积小,跨平台,能支持一些新特性——

然后我找到了用 Rust 写的 simple-http-server, 它十分符合我心目中的目标,除了一点—— Web UI 实在不太好看//

然后我就尝试研究它的源码,发现是 字 符 串 拼 接

我一下子人就蒙了,明明维护还蛮勤快的,为啥要用这种没法很好扩展的方式啊喂!

主要是我没法在不破坏原项目结构下改 CSS, 因为我 Rust 其实是现学的

然后这个项目就诞生了。

本质上,这是我的一个用来学习 Rust 的练手项目,还请各位大佬不要深究写的如何
尤其是我那辣鸡的很的前端

项目预览

项目链接 - Github

截图

用到的一些库

一开始我其实走了些弯路,用了一个在这方面自定义程度不是很高的 Rocket 框架,不过后面改成了 actix-web

  • clap 提供命令行交互(话说这玩意 3.0.0 啥时候才能 release 啊)
  • tera 提供模板渲染:前端全写到一个文件里,方便后期拓展
  • actix-web Rust 首屈一指的 Web 框架,性能超好
  • actix-files 用于提供静态资源
  • actix-web-httpauth 基本的身份验证
  • rustls 提供 TLS 和 HTTP/2 支持
  • env_logger 当然是用来输出漂亮的 Log 啦,开发服务器的本职工作!

功能

  • 自动生成index
  • 支持绝对路径/相对路径
  • Brotli/Gzip/Deflate 自适应压缩(但默认禁用,和分段下载/多线程冲突,毕竟我也没法给你预压缩资源
  • 控制 dotfiles 是否可访问:别一不小心把你的id_rsa给放到公网啊喂!
  • 支持 HTTP Cache / HTTP 304 / Last-Modified / ETag 等缓存方式,当然,你也可以完全禁用缓存
  • 清晰的组织好的彩色 Log
  • 可以重定向/禁用 Log 以获得性能翻倍(事实证明,Windows Terminal 确实是个辣鸡,整个服务器的瓶颈居然是它!)
  • 自动打开浏览器对应页面!添加-o参数即可!
  • SPA单页应用模式 —— 404 的话默认提供 /index.html (类似某些 serverless 托管静态页面的 200.html)
  • HTTP Basic Authentication 认证 —— 简单的用户名密码支持!
  • 支持 TLS/SSL 和 HTTP/2 !不过你得有证书啦
  • 一键搞定前端 CORS 跨域错误!一键添加Access-Control-Allow-Origin: *,或者为了安全性,你也可以自定义这个标头
  • cargo doc 支持 —— 一键查看本地文档(需要 cargo 安装)

安装使用

Archlinux / Manjaro

1
yay -S srv-bin

其他系统

Github Release 自己下载啦,我相信你们知道应该咋做(懒

使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
srv 1.0.0-rc

Tim_Paik <timpaikc@outlook.com>

simple http server written in rust

USAGE:
srv [FLAGS] [OPTIONS] [ROOT] [SUBCOMMAND]

ARGS:
<ROOT> Root directory [default: .]

FLAGS:
-c, --compress Enable streaming compression (Content-
length/segment download will be disabled)
-d, --dotfiles Show dotfiles
-h, --help Print help information
--nocache Disable HTTP cache
--nocolor Disable cli colors
--noindex Disable automatic index page generation
-o, --open Open the page in the default browser
-q, --quiet Disable access log output
--quietall Disable all output
--spa Enable Single-Page Application mode (always serve
/index.html when the file is not found)
-V, --version Print version information

OPTIONS:
-a, --address <address> IP address to serve on [default: 0.0.0.0]
--auth <auth> HTTP Auth (username:password)
--cert <cert> Path of TLS/SSL public key (certificate)
--cors <VALUE>... Enable CORS
--key <key> Path of TLS/SSL private key
-p, --port <port> Port to serve on [default: 8000]

SUBCOMMANDS:
doc Open cargo doc via local server (Need cargo installation)
help Print this message or the help of the given subcommand(s)

关于开源

本项目使用 MPL 2.0 协议开源,欢迎 Pr !

1
2
3
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at https://mozilla.org/MPL/2.0/.

欢迎评论!

如果你有什么想要的功能/有什么建议,可以发在评论区或者 Github Issues, 我都会认真看的

切换主题的功能在计划了——
当然,如果你对我写的辣鸡 CSS 不太满意(其实我也不满意),fork 我的仓库然后修改就好啦

不过我目前最想要的 Pr 是帮我完善使用方法的,有人能帮我写几个例子就好了

作者

Tim_Paik

发布于

2021-10-04

更新于

2021-10-04

许可协议

评论