6 个版本 (3 个重大更新)
0.4.1 | 2024年7月11日 |
---|---|
0.4.0 | 2024年7月11日 |
0.3.0 | 2023年11月23日 |
0.2.0 | 2023年2月1日 |
0.1.1 | 2022年9月29日 |
#502 在 HTTP服务器
每月下载量 227
在 2 crates 中使用
15KB
274 行
Actix web 的 ETag 中间件
使用方法
use actix_web::{web, App, HttpServer, HttpResponse, Error};
use actix_middleware_etag::{Etag};
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(move ||
App::new()
// Add etag headers to your actix application. Calculating the hash of your GET bodies and putting the base64 hash in the ETag header
.wrap(Etag::default())
...
.bind(("127.0.0.1", 8080))?
.run()
.await
}
这将对所有 GET 请求的正文进行哈希处理,并将哈希值 base64 编码作为弱 ETag 标头添加到响应中
lib.rs
:
Actix 中间件 - ETag
为了避免向下游发送不必要的正文,这个中间件处理比较 If-None-Match 标头与 GET 请求正文的计算哈希值。受 Node 的 express 框架 及其 ETag 计算方式启发,此中间件的行为类似。
首先对结果正文进行哈希处理,然后对哈希值进行 base64 编码,并将其设置为 GET 请求的 ETag 标头。
这不会在服务器端节省 CPU 资源,因为正文仍在计算中。
注意:此中间件不检查标头,因此如果您需要即使在正文完全相同的情况下刷新标头,请使用其他方法(或者最好是,在此存储库中添加一个 PR 以添加一种合理的方式来遵守标头)
依赖关系
~15–25MB
~451K SLoC