SRV 开发服务器
起因
我之前在学习 HTML/CSS/JavaScript
的时候,总想着有没有一个这样的命令,它可以用一行 Bash 开启一个静态资源服务器,并且能帮我打开浏览器。
我找了很久,用过了 Node 的 http-server 包,可惜是 Node, 因为版本问题我在其他电脑上用时总得先配置一下 Node 环境
Python 的 http.server 模块看起来也不错,但界面 emmmmmmm, 而且不是所有机子都有 Python
然后我更明确了要求:要单文件,体积小,跨平台,能支持一些新特性——
然后我找到了用 Rust 写的 simple-http-server, 它十分符合我心目中的目标,除了一点—— Web UI 实在不太好看//
然后我就尝试研究它的源码,发现是 字 符 串 拼 接 !
我一下子人就蒙了,明明维护还蛮勤快的,为啥要用这种没法很好扩展的方式啊喂!
主要是我没法在不破坏原项目结构下改 CSS, 因为我 Rust 其实是现学的
然后这个项目就诞生了。
本质上,这是我的一个用来学习 Rust 的练手项目,还请各位大佬不要深究写的如何尤其是我那辣鸡的很的前端
项目预览
用到的一些库
一开始我其实走了些弯路,用了一个在这方面自定义程度不是很高的 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 | srv 1.0.0-rc |
关于开源
本项目使用 MPL 2.0 协议开源,欢迎 Pr !
1 | This Source Code Form is subject to the terms of the Mozilla Public |
欢迎评论!
如果你有什么想要的功能/有什么建议,可以发在评论区或者 Github Issues, 我都会认真看的
切换主题的功能在计划了——
当然,如果你对我写的辣鸡 CSS 不太满意(其实我也不满意),fork 我的仓库然后修改就好啦
不过我目前最想要的 Pr 是帮我完善使用方法的,有人能帮我写几个例子就好了