diff --git a/Cargo.lock b/Cargo.lock index bc14bec..6d0d708 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -68,10 +68,12 @@ dependencies = [ "ahash", "base64", "bitflags", + "brotli", "bytes", "bytestring", "derive_more", "encoding_rs", + "flate2", "futures-core", "h2", "http", @@ -260,6 +262,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + [[package]] name = "ammonia" version = "3.2.1" @@ -610,6 +627,27 @@ dependencies = [ "cipher", ] +[[package]] +name = "brotli" +version = "3.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + [[package]] name = "bumpalo" version = "3.11.1" diff --git a/Cargo.toml b/Cargo.toml index 418ad16..a749e61 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,6 +25,8 @@ anyhow = "1.0" actix-rt = "2.7.0" actix-web = { version = "4.0.1", default-features = false, features = [ "rustls", + "compress-brotli", + "compress-gzip", ] } actix-webfinger = "0.4.0" activitystreams = "0.7.0-alpha.19" diff --git a/src/main.rs b/src/main.rs index 3aec493..a428991 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,7 @@ #![allow(clippy::needless_borrow)] use activitystreams::iri_string::types::IriString; -use actix_web::{web, App, HttpServer}; +use actix_web::{middleware::Compress, web, App, HttpServer}; use collector::MemoryCollector; #[cfg(feature = "console")] use console_subscriber::ConsoleLayer; @@ -224,7 +224,8 @@ async fn do_server_main( app }; - app.wrap(TracingLogger::default()) + app.wrap(Compress::default()) + .wrap(TracingLogger::default()) .wrap(Timings) .service(web::resource("/").route(web::get().to(index))) .service(web::resource("/media/{path}").route(web::get().to(routes::media)))