From e57fed3acf1bf5c1fd7a40bbfcb77ea440cfb55b Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sun, 25 Aug 2024 01:20:34 +0200 Subject: properly hash headers in cache --- src/modules/cache.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/modules/cache.rs b/src/modules/cache.rs index 03dc1be..b07bbbb 100644 --- a/src/modules/cache.rs +++ b/src/modules/cache.rs @@ -52,13 +52,28 @@ impl Node for Cache { request: NodeRequest, ) -> Pin> + Send + Sync + 'a>> { Box::pin(async move { - // totally wrong... + // not very fast let mut hasher = Sha256::new(); + hasher.update(request.method().as_str().len().to_be_bytes()); hasher.update(request.method().as_str()); + hasher.update(request.uri().path().len().to_be_bytes()); hasher.update(request.uri().path()); + hasher.update(if request.uri().query().is_some() { + [1] + } else { + [0] + }); if let Some(q) = request.uri().query() { + hasher.update(q.len().to_be_bytes()); hasher.update(q); } + hasher.update(request.headers().len().to_be_bytes()); + for (k, v) in request.headers() { + hasher.update(k.as_str().len().to_be_bytes()); + hasher.update(v.as_bytes().len().to_be_bytes()); + hasher.update(k); + hasher.update(v); + } let key: [u8; 32] = hasher.finalize().try_into().unwrap(); if let Some(resp) = self.entries.read().await.get(&key) { -- cgit v1.2.3-70-g09d2