11 个版本 (4 个稳定版)
1.0.3 | 2020 年 1 月 26 日 |
---|---|
1.0.2 | 2020 年 1 月 13 日 |
1.0.0 | 2019 年 12 月 13 日 |
0.6.1 | 2019 年 10 月 28 日 |
0.5.1 | 2019 年 9 月 29 日 |
#811 在 HTTP 服务器 中
20KB
514 行
httpserv
httpserv 是一个微型、无依赖的 HTTP 文件服务器,用于 HTML 的本地开发。它不是最快的,也不是最小的可执行文件,也不是功能最丰富的,但它部署起来极其简单,几乎只做一件事,那就是通过 HTTP 服务器提供你命名的文件。具体来说,它只做以下几件事:
- 解析 URL 以找到本地文件路径
- 确保 URL 中不包含
..
- 如果该文件路径指向一个目录,则添加
/index.html
- 使用扩展名来确定
Content-Type
- 发送文件
由于其简单性,安装、启动和响应都非常快
计划中的任务可以在 问题中查看
计划不包括的功能
- 默认情况下没有依赖项(在功能门后面是可以的)
- 在会牺牲易用性或设置速度的情况下最大化响应速度
- 任何会给 httpserv 产生明显延迟的东西
- 任何针对更好的生产适用性的东西
安装
cargo install httpserv
这就是全部了。假设 Cargo 的 bin 目录已添加到您的路径中,您现在可以从命令行调用 httpserv
。有关安装 Cargo 的说明,请参阅 rustup.rs。
在 WSL 上,您可能需要根据您是否在 Windows 或 WSL 端安装了 Rust 来调用 cargo.exe
和 httpserv.exe
。
用法
所有参数都是可选的 -- 如果您想以默认映射在 localhost:8080
上提供您的当前目录,您只需输入 httpserv
并按回车键。否则
httpserv [directory] [listen] [mappings...]
directory
:查找要服务的文件的目录。默认为.
listen
:监听的宿主/端口,这是对SocketAddr
的FromStr
实现的期望。默认为localhost:8080
mappings...
:除了默认值之外,任何从文件扩展名到MIME类型的额外映射。此处指定的任何内容,如果与默认扩展名匹配,将覆盖默认MIME类型。格式为extension=MIME
,扩展名前没有.
。
已知问题
因为这个工具是为本地开发而不是生产使用而设计的,所以有些问题我没有费心去修复。总的来说,原因在于httpserv是为辅助本地开发而设计的。如果你在任何无法随意重新启动它的场合使用它,你做得非常,非常不对。
- 过长URL或过多数量的请求头可能会使进程挂起或崩溃
- 请求是串行处理的,所以如果一次性收到足够多的请求,一些请求可能需要一段时间才能得到响应;然而,解析任何单个请求的时间非常快,所以通常不是问题
- 如果在发送HTTP头部和发送剩余正文之间文件被修改,则报告的
Content-Length
将是不正确的,所以浏览器可能会截断内容或显示错误。 - 恶意用户可能会发送部分请求(例如,永不结束头部)并锁定服务器。