diff --git a/core/http/src/handlers/handlers.rs b/core/http/src/handlers/handlers.rs index d9ba8df51bca6645819fd56caae79decabfeac6c..f81441c0958868b58a4ce46a4b32a271f0c358aa 100755 --- a/core/http/src/handlers/handlers.rs +++ b/core/http/src/handlers/handlers.rs @@ -6,7 +6,7 @@ use crate::handling::{ file_handlers::NamedFile, request::Request, response::{Outcome, Response, ResponseBody, Status}, - routes::Data, + routes::Data, methods::Method, }; use crate::setup::MountPoint; @@ -103,7 +103,8 @@ pub async fn handle_connection(mut stream: TcpStream, mountpoints: Vec<MountPoin } let mounted_request_uri = request.uri.strip_prefix(mountpoint.mountpoint).unwrap(); for route in mountpoint.routes { - if route.method != request.method { + if (route.method != request.method) && + ((route.method != Method::Get) && (request.method == Method::Head)) { continue; } if !route.compare_uri(mounted_request_uri) { @@ -130,7 +131,11 @@ pub async fn handle_connection(mut stream: TcpStream, mountpoints: Vec<MountPoin format!("HTTP/1.1 {}\r\n", success.status.unwrap_or(Status::Ok)) + &success.headers.join("\r\n") + "\r\n\r\n", - success.body.get_data(), + if request.method == Method::Head { + vec![] + } else { + success.body.get_data() + } ), Outcome::Failure(error) => failure_handler(error), Outcome::Forward(_) => failure_handler(Status::NotFound), diff --git a/site/src/main.rs b/site/src/main.rs index 48d109dd82b347301653cef35697c49db3bdd9b0..6e560d46457a868d835d627873e51005fb59b663 100644 --- a/site/src/main.rs +++ b/site/src/main.rs @@ -20,8 +20,13 @@ fn hashmap_to_string(map: &HashMap<&str, &str>) -> String { result } -fn handle_static_hi(request: Request<'_>, _data: Data) -> Outcome<Response, Status, Data> { - let response = hashmap_to_string(&request.get_form_keys(vec!["asdf", "jkj"]).unwrap()); +fn handle_static_hi(request: Request<'_>, data: Data) -> Outcome<Response, Status, Data> { + let keys = if let Ok(keys) = request.get_form_keys(vec!["asdf", "jkl;"]) { + keys + } else { + return Outcome::Forward(data); + }; + let response = hashmap_to_string(&keys); Outcome::Success(Response { headers: vec![ format!("Content-Length: {}", response.len()),