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日

#502HTTP服务器

Download history 39/week @ 2024-04-24 43/week @ 2024-05-01 66/week @ 2024-05-08 66/week @ 2024-05-15 125/week @ 2024-05-22 81/week @ 2024-05-29 154/week @ 2024-06-05 94/week @ 2024-06-12 72/week @ 2024-06-19 43/week @ 2024-06-26 69/week @ 2024-07-03 292/week @ 2024-07-10 54/week @ 2024-07-17 95/week @ 2024-07-24 42/week @ 2024-07-31 24/week @ 2024-08-07

每月下载量 227
2 crates 中使用

MIT 许可证

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