44次发布
0.1.991 | 2022年12月25日 |
---|---|
0.1.990 | 2022年12月25日 |
0.1.84 | 2022年11月12日 |
0.1.75 | 2022年10月26日 |
0.1.64 | 2022年8月28日 |
#9 in #serve-static
134每月下载量
54KB
886 行
响应器
易于使用,易于设置。这是一个简单Web服务器的示例
use responder::prelude::*;
fn main() {
/*- Initiaize routes -*/
let routes = Route::Stack("", &[
Route::Stack("path", &[
Route::Get("enpoint", endpoint),
Route::Get("enpoint2", some_other_endpoint),
]),
]);
/*- Initiaize server -*/
Server::new()
// This will be localhost, use
// 0.0.0.0 if using e.g. docker
.address("127.0.0.1")
.port(8080)
// Serve static files from a folder
.serve("./static")
.routes(routes)
.start()
.unwrap();
// Go to 'localhost:8080/path/enpoint' to see results
}
简单,不是吗? 现在我该在哪里以及如何处理所有我的请求?Stream
和Respond
结构体帮助您管理传入请求,并提供许多构建http响应的选项。
---> Stream
Stream
结构体作为参数传递给每个端点函数。它包含有价值的信息,并提供了一些显著的方法来满足您的需求。以下是一个使用Stream
结构体特性的端点函数示例
/* Will respond with the http-status code 200 */
fn endpoint(stream:&mut Stream) -> () {
stream.respond_status(200);
}
---> Respond
Respond
结构体用于构建HTTP响应。它主要使用“构建器模式”构建。以下是如何使用它的一个示例
/* Will respond with some text */
fn endpoint(stream:&mut Stream) -> () {
stream.respond(
200,
Respond::new()
.text("Hello, world!")
);
}
安全 🚨
现在我们已经介绍了responder
的基础知识,我们将简要介绍安全。Rust默认是安全的。因此,我们不需要担心内存泄漏等问题。然而,这并不能阻止人们访问受限的端点。responder
有一个解决方案。它被称为origin-control
。它是Route
结构体中的一个枚举变体,名为ControlledStack
,其主要目的是检查传入请求是否满足某些条件,然后要么丢弃请求,要么允许其访问内部端点。以下是如何做到这一点的示例
let routes = &[
/* Will be accessible to all requests */
Route::Get("non-admin", non_admin_page),
/* Everything inside `Route::ControlledStack`
will be accessible to all requests matching
the `origin_control` functions criteria */
Route::ControlledStack(origin_control, "admin", &[
Route::Get("secret-data", secret_data),
])
];
/* Create the origin control function */
fn origin_control_function(stream:&mut Stream) -> bool {
/* Check if request has the correct token */
if let Some(token) = stream.headers.get("token") {
if token == &"password123" {
/* Return true indicating that
the request matches criteria */
return true
};
};
/* Return false indicating that the
request does not match criteria */
false
}
依赖关系
~10KB