From 8a65bb2c920d870ad0ad02008251e799870f1212 Mon Sep 17 00:00:00 2001 From: javalsai Date: Tue, 24 Mar 2026 21:47:00 +0100 Subject: [PATCH] dev: do something about HEAD requests --- README.md | 4 ++++ src/server/services/not_found.rs | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 97d8caa..a94783d 100644 --- a/README.md +++ b/README.md @@ -11,3 +11,7 @@ This is a reimplementation of the oauth2 server I was making and forgot where I # License All code licensed under the GPL-2.0-only. + +# Known Issues + +HTTP `HEAD` requests are not responded to properly, I'm exploring solutions but each one has its drawbacks to consider. diff --git a/src/server/services/not_found.rs b/src/server/services/not_found.rs index 87bc9db..b27ff5a 100644 --- a/src/server/services/not_found.rs +++ b/src/server/services/not_found.rs @@ -1,7 +1,4 @@ -use actix_web::{ - HttpRequest, HttpResponse, - web::{self, Bytes}, -}; +use actix_web::{HttpRequest, HttpResponse, web}; use futures_util::stream; use crate::consts; @@ -26,6 +23,16 @@ fn mix_u32s(seed: impl Iterator) -> u32 { } pub async fn not_found(req: HttpRequest) -> HttpResponse { + if req.method().as_str().eq_ignore_ascii_case("HEAD") { + return HttpResponse::NotImplemented() + .insert_header(( + "Unimplemented", + "The HEAD method is not yet implemented \ + and this response is not valid for this endpoint", + )) + .body(()); + } + let seed = req.path().as_bytes(); let random = mix_u32s(seed.iter().copied().map(u32::from)); @@ -40,7 +47,7 @@ pub async fn not_found(req: HttpRequest) -> HttpResponse { Ok::<_, !>(web::Bytes::from(format!( "> {method} '{url}'\n404 NOT FOUND\nLet's all love lain\n\n" ))), - Ok(Bytes::from_static(res.as_bytes())), + Ok(web::Bytes::from_static(res.as_bytes())), ])) // .body(format!( // "> {method} '{url}'\n404 NOT FOUND\nLet's all love lain\n\n{res}"