>_ d▊

单二进制 HTTP 服务器 —— 一行命令秒开目录服务,一个配置文件变身轻量 NGINX

rust 🦀 memory-safe single binary axum + tokio license: 1PL
cargo install d

features

开箱即用的目录服务,以及正确的 HTTP 语义。

📁

目录列表

12 类文件图标、名称/大小/时间/类型四维排序、面包屑导航、隐藏文件开关。

🎨

预览与高亮

代码语法高亮、Markdown/Org 渲染、图片/音视频预览,Preview / Raw / Download 三种视图。

📡

Range 请求 RFC 9110

真正的字节切片(seek + take),支持后缀范围,无效范围返回 416。断点续传、媒体拖动均可用。

🏷️

缓存与 304

ETag + If-None-Match(含弱比较与 *)、If-Modified-Since,命中即 304,省流量。

🗜️

压缩与 CORS

gzip / deflate / brotli 自动协商;CORS 默认放开 GET/HEAD,方便跨域调试。

🛡️

安全

路径穿越钳制、符号链接逃逸防御(canonicalize 校验)、RFC 5987 文件名编码、零 unwrap 生产代码。

quickstart

三秒钟,把任意目录变成 HTTP 服务。

terminal
# 安装
$ cargo install d

# 服务当前目录
$ d
INFO Starting server on http://localhost:8080

# 指定目录与端口
$ d -r ./public -p 3000

# 断点续传 / 部分下载
$ curl -r 0-1023 http://localhost:8080/data.bin

examples

仓库内置 5 组可运行示范(examples/),覆盖各种文件类型。

目录演示内容启动命令
demo/综合演示:列表、排序、各类型预览d -r examples/demo
code/多语言语法高亮(Py/JS/Go/Shell/SQL)d -r examples/code
docs/文档预览(Markdown/Org/TXT/CSV)d -r examples/docs
media/图片预览(SVG)d -r examples/media
static-site/静态网站(HTML+CSS+JS)d -r examples/static-site

quality

每个阶段都遵循「开发 → 测试 → 验收」循环。

🧪

51 个自动化测试

26 单元 + 25 集成(oneshot 方式,无需真实端口),覆盖 Range/304/安全/列表全部关键路径。

✅

验收脚本

scripts/acceptance.sh:构建 + 真实启动 + 22 项端到端 HTTP 行为检查,失败即非零退出。

⚙️

CI

GitHub Actions 双平台(ubuntu / macOS)矩阵:fmt + clippy(零警告)+ test。

roadmap

从目录服务到轻量 NGINX。

Phase 0 — 技术还债 ✔ done

模块化拆分、Range/304 修复、符号链接防御、SIGTERM、依赖瘦身、测试基座与 CI。

Phase 1 — 目录服务打磨 ▶ next

index.html 自动服务、目录打包下载(zip/tar.gz)、Basic Auth、访问日志、TLS(手动证书)、前端资源内嵌。

Phase 2 — 轻量 NGINX 模式 planned

TOML 配置文件、虚拟主机、反向代理 + 轮询负载均衡(hyper 自研)、SIGHUP 热重载。

Phase 3 — 写操作(可选) evaluating

上传 / WebDAV / 在线编辑,届时根据实际需求评审。