Skip to content

Commit 12df6f3

Browse files
committed
Merge branch 'georgemp-georgemp/Overwrite_http_host_header' into development
Fix build break issues in header_tests
2 parents 1f49755 + 42881d2 commit 12df6f3

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

Release/src/http/client/http_client_asio.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,7 @@ class asio_context : public request_context, public std::enable_shared_from_this
607607
request_stream.imbue(std::locale::classic());
608608
const auto &host = base_uri.host();
609609

610-
request_stream << method << " " << encoded_resource << " " << "HTTP/1.1" << CRLF << "Host: " << host;
610+
request_stream << method << " " << encoded_resource << " " << "HTTP/1.1" << CRLF;
611611

612612
int port = base_uri.port();
613613

@@ -616,7 +616,11 @@ class asio_context : public request_context, public std::enable_shared_from_this
616616
port = (ctx->m_connection->is_ssl() ? 443 : 80);
617617
}
618618

619-
request_stream << ":" << port << CRLF;
619+
// Add the Host header if user has not specified it explicitly
620+
if (!m_request.headers().has(header_names::host))
621+
{
622+
request_stream << "Host: " << host << ":" << port << CRLF;
623+
}
620624

621625
// Extra request headers are constructed here.
622626
utility::string_t extra_headers;

Release/tests/functional/http/client/header_tests.cpp

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,37 @@ TEST_FIXTURE(uri_address, parsing_content_type_redundantsemicolon_string)
382382
auto resp = client.request(methods::GET).get();
383383
VERIFY_ARE_EQUAL(resp.extract_string().get(), utility::conversions::to_string_t(body));
384384
}
385+
386+
TEST_FIXTURE(uri_address, overwrite_http_header)
387+
{
388+
test_http_server::scoped_server scoped(m_uri);
389+
http_client client(m_uri);
390+
391+
// Test default case of cpprestsdk setting host header as host:port
392+
auto& host = m_uri.host();
393+
int port = m_uri.port();
394+
utility::string_t expected_default_header = host + U(":") + utility::conversions::print_string(port);
395+
http_request default_host_headers_request(methods::GET);
396+
scoped.server()->next_request().then([&](test_request *p_request)
397+
{
398+
auto headers = p_request->m_headers;
399+
VERIFY_ARE_EQUAL(expected_default_header, headers[header_names::host]);
400+
p_request->reply(200);
401+
});
402+
403+
client.request(default_host_headers_request).get();
404+
405+
// Test case where we overwrite the host header
406+
http_request overwritten_host_headers_request(methods::GET);
407+
overwritten_host_headers_request.headers().add(U("Host"), host);
408+
scoped.server()->next_request().then([&](test_request *p_request)
409+
{
410+
auto headers = p_request->m_headers;
411+
VERIFY_ARE_EQUAL(host, headers[header_names::host]);
412+
p_request->reply(200);
413+
});
414+
client.request(overwritten_host_headers_request).get();
415+
}
385416
} // SUITE(header_tests)
386417

387-
}}}}
418+
}}}}

0 commit comments

Comments
 (0)