From b872ef866adfee1a5dbbfba7cc88fa1ce1f0482b Mon Sep 17 00:00:00 2001 From: Karen Etheridge Date: Mon, 24 Feb 2025 14:30:40 -0800 Subject: [PATCH] fix_headers() now initializes Host header when needed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RFC9112 ยง3.2-5 says that Host is mandatory, but can be an empty value. resolves issue #2232. --- lib/Mojo/Message/Request.pm | 2 +- t/mojo/request.t | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/Mojo/Message/Request.pm b/lib/Mojo/Message/Request.pm index c9bbd01395..1e1dd67ee7 100644 --- a/lib/Mojo/Message/Request.pm +++ b/lib/Mojo/Message/Request.pm @@ -73,7 +73,7 @@ sub fix_headers { # Host my $url = $self->url; - $headers->host($url->host_port) unless $headers->host; + $headers->host($url->host_port // '') unless defined $headers->host; # Basic authentication if ((my $info = $url->userinfo) && !$headers->authorization) { diff --git a/t/mojo/request.t b/t/mojo/request.t index e001d80feb..70b2b71114 100644 --- a/t/mojo/request.t +++ b/t/mojo/request.t @@ -475,6 +475,11 @@ subtest 'Parse full HTTP 1.0 request (no scheme and empty elements in path)' => is $req->url, '//foo/bar//baz.html?foo=13', 'right URL'; is $req->headers->content_type, 'text/plain', 'right "Content-Type" value'; is $req->headers->content_length, 27, 'right "Content-Length" value'; + is $req->headers->host, undef, '"Host" value is not defined'; + + $req->fix_headers; + is $req->url->host, undef, 'still no url host'; + is $req->headers->host, '', '"Host" value is fixed'; }; subtest 'Parse full HTTP 1.0 request (behind reverse proxy)' => sub {