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日

#8HTTP 服务器 中排名

Download history 140464/week @ 2024-04-20 141691/week @ 2024-04-27 131355/week @ 2024-05-04 149351/week @ 2024-05-11 153355/week @ 2024-05-18 150502/week @ 2024-05-25 171313/week @ 2024-06-01 172589/week @ 2024-06-08 160653/week @ 2024-06-15 175093/week @ 2024-06-22 166411/week @ 2024-06-29 178228/week @ 2024-07-06 167680/week @ 2024-07-13 174412/week @ 2024-07-20 167974/week @ 2024-07-27 160916/week @ 2024-08-03

699,778 每月下载量
263 个 crates (142 个直接使用) 中使用

MIT/Apache

120KB
2.5K SLoC

tiny-http

Crate Documentation License CI Status

文档

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-2.0 许可证定义的,有意提交给 tiny-http 的任何贡献,均应按上述方式双许可,不附加任何额外条款或条件。

依赖

~0.2–10MB
~113K SLoC