From 4f0175c9c815b2339a4785039fb76b72d18e1d49 Mon Sep 17 00:00:00 2001 From: Fredrik Ekre Date: Tue, 23 Feb 2021 15:18:56 +0100 Subject: [PATCH] Include port in Host header, fixes #673 (#680) * Include port in Host header, fixes #673. * Set version to 0.9.5. --- Project.toml | 2 +- src/MessageRequest.jl | 9 ++++++++- test/client.jl | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/Project.toml b/Project.toml index d9064405a..fee6d0125 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "HTTP" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" authors = ["Jacob Quinn", "Sam O'Connor", "contributors: https://github.com/JuliaWeb/HTTP.jl/graphs/contributors"] -version = "0.9.4" +version = "0.9.5" [deps] Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" diff --git a/src/MessageRequest.jl b/src/MessageRequest.jl index 44b65317c..092dad561 100644 --- a/src/MessageRequest.jl +++ b/src/MessageRequest.jl @@ -32,7 +32,14 @@ function request(::Type{MessageLayer{Next}}, target=resource(url), parent=nothing, iofunction=nothing, kw...) where Next - defaultheader!(headers, "Host" => url.host) + if isempty(url.port) || + (url.scheme == "http" && url.port == "80") || + (url.scheme == "https" && url.port == "443") + hostheader = url.host + else + hostheader = url.host * ":" * url.port + end + defaultheader!(headers, "Host" => hostheader) defaultheader!(headers, "Accept" => "*/*") if USER_AGENT[] !== nothing defaultheader!(headers, "User-Agent" => USER_AGENT[]) diff --git a/test/client.jl b/test/client.jl index 01f9b430b..9627bd94a 100644 --- a/test/client.jl +++ b/test/client.jl @@ -238,6 +238,38 @@ end end end +@testset "Implicit request headers" begin + server = listen(IPv4(0), 8080) + tsk = @async HTTP.listen("0.0.0.0", 8080; server=server) do http + data = Dict{String,String}(http.message.headers) + HTTP.setstatus(http, 200) + HTTP.startwrite(http) + HTTP.write(http, sprint(JSON.print, data)) + end + old_user_agent = HTTP.MessageRequest.USER_AGENT[] + default_user_agent = "HTTP.jl/$VERSION" + # Default values + HTTP.setuseragent!(default_user_agent) + d = JSON.parse(IOBuffer(HTTP.get("http://localhost:8080").body)) + @test d["Host"] == "localhost:8080" + @test d["Accept"] == "*/*" + @test d["User-Agent"] == default_user_agent + # Overwriting behavior + headers = ["Host" => "http.jl", "Accept" => "application/json"] + HTTP.setuseragent!("HTTP.jl test") + d = JSON.parse(IOBuffer(HTTP.get("http://localhost:8080", headers).body)) + @test d["Host"] == "http.jl" + @test d["Accept"] == "application/json" + @test d["User-Agent"] == "HTTP.jl test" + # No User-Agent + HTTP.setuseragent!(nothing) + d = JSON.parse(IOBuffer(HTTP.get("http://localhost:8080").body)) + @test !haskey(d, "User-Agent") + + HTTP.setuseragent!(old_user_agent) + close(server) +end + import NetworkOptions, MbedTLS @testset "NetworkOptions for host verification" begin # Set up server with self-signed cert