30 个版本
0.12.0 | 2022年10月6日 |
---|---|
0.11.0 | 2022年2月25日 |
0.10.0 | 2022年1月12日 |
0.9.0 | 2021年10月14日 |
0.2.1 | 2015年6月13日 |
#8 在 HTTP 服务器 中排名
699,778 每月下载量
在 263 个 crates (142 个直接使用) 中使用
120KB
2.5K SLoC
tiny-http
tiny-http 是一个 Rust 编写的简洁而强大的 HTTP 服务器。其主要目标是完全符合 HTTP 标准,并提供一种简单的方式来创建 HTTP 服务器。
tiny-http 处理哪些内容?
- 接受和管理与客户端的连接
- 解析请求
- 请求管线化
- HTTPS(使用 OpenSSL 或 Rustls)
- 传输编码和内容编码
- 将用户输入(例如 POST 输入)转换为连续的 UTF-8 字符串(尚未实现)
- 范围(尚未实现)
Connection: upgrade
(用于 WebSockets)
tiny-http 处理与客户端连接和数据传输及编码相关的所有内容。
其他所有内容(解析头部值、多部分数据、路由、ETags、缓存控制、HTML 模板等)必须由您的代码处理。如果您想使用 Rust 创建网站,我强烈建议使用框架而不是此库。
安装
将以下内容添加到您项目的 Cargo.toml
文件中
[dependencies]
tiny_http = "0.11"
用法
use tiny_http::{Server, Response};
let server = Server::http("0.0.0.0:8000").unwrap();
for request in server.incoming_requests() {
println!("received request! method: {:?}, url: {:?}, headers: {:?}",
request.method(),
request.url(),
request.headers()
);
let response = Response::from_string("hello world");
request.respond(response);
}
速度
tiny-http 是以速度为核心设计的
- 每个客户端连接将被调度到线程池。每个线程将处理一个客户端。如果客户端连接时没有可用的线程,将创建一个新的线程。空闲时间较长的线程(目前为 5 秒)将自动死亡。
- 如果来自同一客户端的多个请求正在管线化(即,在等待响应之前发送多个请求),tiny-http 将一次性读取它们,并通过
server.recv()
可用。tiny-http 将自动重新排列响应,以确保它们按正确顺序发送。 - 在请求正文较大(目前 > 1kB)的情况下,存在一个对之前陈述的例外,此时请求处理器将直接从流中读取正文,并且 tiny-http 将等待读取完毕后再处理下一个请求。tiny-http 从不会等待一个请求被回答后才读取下一个请求。
- 当客户端连接发送了其最后一个请求(通过发送
Connection: close
标头)时,线程将立即停止从这个客户端读取,并且可以被回收,即使请求尚未得到回答。套接字的读取部分也将立即关闭。 - 客户端请求的解码是延迟进行的。如果您不读取请求的正文,则不会进行解码。
示例
tiny-http 使用示例
- heroku-tiny-http-hello-world - 一个简单的Web应用程序,演示了如何将 tiny-http 部署到 Heroku
- crate-deps - 一个生成在 crates.io 上托管的 crate 依赖图图像的 Web 服务
- rouille - 基于 tiny-http 构建的 Web 框架
许可证
本项目受以下任一许可证的许可
- Apache License, Version 2.0, (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则,您根据 Apache-2.0 许可证定义的,有意提交给 tiny-http 的任何贡献,均应按上述方式双许可,不附加任何额外条款或条件。
依赖
~0.2–10MB
~113K SLoC