32 releases

1.0.0-alpha.5 Mar 5, 2026
1.0.0-alpha.2 Aug 25, 2025
1.0.0-alpha.1 Jul 28, 2025
0.16.0 Jun 26, 2025
0.4.1 Mar 29, 2022

#61 in Caching

Download history 20843/week @ 2025-11-23 29294/week @ 2025-11-30 34704/week @ 2025-12-07 38725/week @ 2025-12-14 15816/week @ 2025-12-21 13596/week @ 2025-12-28 35896/week @ 2026-01-04 33820/week @ 2026-01-11 38186/week @ 2026-01-18 32074/week @ 2026-01-25 34030/week @ 2026-02-01 28117/week @ 2026-02-08 27556/week @ 2026-02-15 28635/week @ 2026-02-22 39698/week @ 2026-03-01 39201/week @ 2026-03-08

138,187 downloads per month
Used in 56 crates (28 directly)

MIT/Apache

365KB
7.5K SLoC

http-cache-reqwest

CI Crates.io Docs.rs Codecov Crates.io

the http-cache logo

A caching middleware that follows HTTP caching rules, thanks to http-cache-semantics. By default, it uses cacache as the backend cache manager. Uses reqwest-middleware for middleware support.

Minimum Supported Rust Version (MSRV)

1.88.0

Install

With cargo add installed :

cargo add http-cache-reqwest

Example

use reqwest::Client;
use reqwest_middleware::{ClientBuilder, Result};
use http_cache_reqwest::{Cache, CacheMode, CACacheManager, HttpCache, HttpCacheOptions};
use std::path::PathBuf;

#[tokio::main]
async fn main() -> Result<()> {
    let client = ClientBuilder::new(Client::new())
        .with(Cache(HttpCache {
          mode: CacheMode::Default,
          manager: CACacheManager::new(PathBuf::from("./cache"), false),
          options: HttpCacheOptions::default(),
        }))
        .build();
    client
        .get("https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching")
        .send()
        .await?;
    Ok(())
}

Streaming Support

When the streaming feature is enabled, you can use StreamingCache for efficient handling of large responses without buffering them entirely in memory. This provides significant memory savings (typically 35-40% reduction) while maintaining full HTTP caching compliance.

Note: Only StreamingCacheManager supports streaming. CACacheManager and MokaManager do not support streaming and will buffer responses in memory.

use reqwest::Client;
use reqwest_middleware::ClientBuilder;
use http_cache_reqwest::{StreamingCache, CacheMode};

#[cfg(feature = "streaming")]
use http_cache::StreamingManager;

#[cfg(feature = "streaming")]
#[tokio::main]
async fn main() -> reqwest_middleware::Result<()> {
    let streaming_manager = StreamingManager::in_memory(1000).await.unwrap();
    let client = ClientBuilder::new(Client::new())
        .with(StreamingCache::new(
            streaming_manager,
            CacheMode::Default,
        ))
        .build();
        
    // Efficiently stream large responses - cached responses are also streamed
    let response = client
        .get("https://httpbin.org/stream/1000")
        .send()
        .await?;
        
    // Process response as a stream
    use futures_util::StreamExt;
    let mut stream = response.bytes_stream();
    while let Some(chunk) = stream.next().await {
        let chunk = chunk?;
        // Process each chunk without loading entire response into memory
        println!("Received {} bytes", chunk.len());
    }
    
    Ok(())
}

#[cfg(not(feature = "streaming"))]
fn main() {}

Features

The following features are available. By default manager-cacache is enabled.

  • manager-cacache (default): enable cacache, a high-performance disk cache, backend manager.
  • manager-moka (disabled): enable moka, a high-performance in-memory cache, backend manager.
  • manager-foyer (disabled): enable foyer, a hybrid in-memory + disk cache, backend manager.
  • streaming (disabled): enable streaming cache support with efficient memory usage. Provides StreamingCache middleware that can handle large responses without buffering them entirely in memory, while maintaining full HTTP caching compliance. Requires cache managers that implement StreamingCacheManager.
  • rate-limiting (disabled): enable cache-aware rate limiting functionality.
  • url-ada (disabled): enable ada-url for URL parsing.

Documentation

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~5–44MB
~635K SLoC