2 个不稳定版本
0.2.0 | 2024 年 2 月 15 日 |
---|---|
0.1.0 | 2024 年 2 月 14 日 |
849 在 HTTP 服务器 中
每月 48 次下载
23KB
417 行
servt
一个程序化 Web 服务器,依赖项非常少。
为什么
- 许多大型框架对于小型项目来说过于笨重,或者不适合你的(或我的!)开发风格
- 因此,这是一个小巧、易于使用,但仍然强大的库
特性
异步
- 默认启用,将
smol
作为依赖项(增加约 35 个依赖项) - 通过创建新任务来执行所有请求
- 如果未启用,则回退到
std::thread
(为每个请求创建新线程)
时间
- 默认启用,将
chrono
作为依赖项(增加约 2 个依赖项,因为启用的特性非常少,即alloc
和now
) - 为所有响应添加一个
Date
标头 - 这在技术上符合 HTTP/1.1 规范,但大多数客户端不需要它也能工作
lib.rs
:
一个简单、易于使用且快速的 Rust Web 服务器库。
设计得既简单又快速,尽管功能足够强大,可以处理大多数用例。
特性
- 简单且易于使用
- 多线程(或异步,如果您启用异步功能
- 重定向
- 自定义错误页面
- 自定义路由(带有查询字符串和表单解析)
- 100-continue 支持
- 自定义状态码
一些注意事项
- 服务器默认使用多线程,但您可以通过启用异步功能来使用异步。
- 日期标头默认包含,但您可以禁用时间功能以排除它(并节省一些依赖项)。如果您不启用它,请记住,这与 HTTP/1.1 规范相冲突,但大多数客户端并不关心,因此将其作为选项包含,以便在配置为这种方式时将库保持尽可能轻量。
- 目前,服务器不支持持久连接,但计划在将来实现(以及可能的 HTTP/2 支持)。
- 故意不支持 Last-Modified、If-Modified-Since 等,因为它不是设计用来服务静态文件的,而是用来服务不能以相同方式跟踪的功能。
确保您的回调不会 panic
- 如果回调函数发生panic,互斥锁会被毒化,因此服务器在后续对路由的任何请求都会返回500内部服务器错误。因此,请确保您的回调函数不要panic(或处理任何错误并返回500错误)。
支持的路由格式
-
/path
-
/path/
-
/path?query=string
-
/path/?query=string
-
site.com/path
-
site.com/path/
-
site.com/path?query=string
-
site.com/path/?query=string
-
请注意,HTTP/1.1规范要求使用Host头,但如果以HTTP 1.0发送请求,服务器将不会强制执行它(否则会返回400错误)。
示例
基本的 'Hello, World!' 服务器
use servt::{Server, ParsedRequest};
let mut server = Server::new(8080, "localhost".to_string());
server.route("/", |req| ("Hello, World!".to_string(), 200));
server.run();
示例良好的表单处理实践
use servt::{Server, ParsedRequest};
let mut server = Server::new(8080, "localhost".to_string());
server.route("/", |req| match req.form {
Some(form) => (format!("Hello, {}!", form.get("name").unwrap_or(&"World".to_string())), 200),
None => ("Hello, World!".to_string(), 200),
});
server.run();
自定义错误页面
use servt::{Server, ParsedRequest};
let mut server = Server::new(8080, "localhost".to_string());
server.error(404, |_| ("Custom 404 page".to_string(), 404));
server.run();
依赖关系
~0.1–8.5MB
~78K SLoC