diff --git a/source/common/config/http_subscription_impl.h b/source/common/config/http_subscription_impl.h index b0d0ac94f0597..b084c9fa71196 100644 --- a/source/common/config/http_subscription_impl.h +++ b/source/common/config/http_subscription_impl.h @@ -69,6 +69,9 @@ class HttpSubscriptionImpl : public Http::RestApiFetcher, request.headers().insertMethod().value().setReference(Http::Headers::get().MethodValues.Post); request.headers().insertPath().value(path_); request.body().reset(new Buffer::OwnedImpl(MessageUtil::getJsonStringFromMessage(request_))); + request.headers().insertContentType().value().setReference( + Http::Headers::get().ContentTypeValues.Json); + request.headers().insertContentLength().value(request.body()->length()); } void parseResponse(const Http::Message& response) override { diff --git a/source/common/upstream/cds_subscription.cc b/source/common/upstream/cds_subscription.cc index 7e975b833ecd7..b0398d818e45c 100644 --- a/source/common/upstream/cds_subscription.cc +++ b/source/common/upstream/cds_subscription.cc @@ -27,6 +27,9 @@ void CdsSubscription::createRequest(Http::Message& request) { request.headers().insertMethod().value().setReference(Http::Headers::get().MethodValues.Get); request.headers().insertPath().value( fmt::format("/v1/clusters/{}/{}", local_info_.clusterName(), local_info_.nodeName())); + request.headers().insertContentType().value().setReference( + Http::Headers::get().ContentTypeValues.Json); + request.headers().insertContentLength().value(size_t(0)); } void CdsSubscription::parseResponse(const Http::Message& response) { diff --git a/source/common/upstream/sds_subscription.cc b/source/common/upstream/sds_subscription.cc index 788c431441465..4e5f6b1682d4d 100644 --- a/source/common/upstream/sds_subscription.cc +++ b/source/common/upstream/sds_subscription.cc @@ -85,6 +85,9 @@ void SdsSubscription::createRequest(Http::Message& message) { message.headers().insertMethod().value().setReference(Http::Headers::get().MethodValues.Get); message.headers().insertPath().value("/v1/registration/" + cluster_name_); + message.headers().insertContentType().value().setReference( + Http::Headers::get().ContentTypeValues.Json); + message.headers().insertContentLength().value(size_t(0)); } void SdsSubscription::onFetchComplete() { diff --git a/source/server/lds_subscription.cc b/source/server/lds_subscription.cc index 713e6b751a789..86858f48d2739 100644 --- a/source/server/lds_subscription.cc +++ b/source/server/lds_subscription.cc @@ -30,6 +30,9 @@ void LdsSubscription::createRequest(Http::Message& request) { request.headers().insertMethod().value().setReference(Http::Headers::get().MethodValues.Get); request.headers().insertPath().value( fmt::format("/v1/listeners/{}/{}", local_info_.clusterName(), local_info_.nodeName())); + request.headers().insertContentType().value().setReference( + Http::Headers::get().ContentTypeValues.Json); + request.headers().insertContentLength().value(size_t(0)); } void LdsSubscription::parseResponse(const Http::Message& response) { diff --git a/test/common/config/http_subscription_test_harness.h b/test/common/config/http_subscription_test_harness.h index 0853b50c8c7db..180b7647bf131 100644 --- a/test/common/config/http_subscription_test_harness.h +++ b/test/common/config/http_subscription_test_harness.h @@ -59,6 +59,8 @@ class HttpSubscriptionTestHarness : public SubscriptionTestHarness { http_callbacks_ = &callbacks; UNREFERENCED_PARAMETER(timeout); EXPECT_EQ("POST", std::string(request->headers().Method()->value().c_str())); + EXPECT_EQ(Http::Headers::get().ContentTypeValues.Json, + std::string(request->headers().ContentType()->value().c_str())); EXPECT_EQ("eds_cluster", std::string(request->headers().Host()->value().c_str())); EXPECT_EQ("/v2/discovery:endpoints", std::string(request->headers().Path()->value().c_str())); @@ -73,6 +75,8 @@ class HttpSubscriptionTestHarness : public SubscriptionTestHarness { } expected_request += "}"; EXPECT_EQ(expected_request, request->bodyAsString()); + EXPECT_EQ(fmt::FormatInt(expected_request.size()).str(), + std::string(request->headers().ContentLength()->value().c_str())); request_in_progress_ = true; return &http_request_; })); diff --git a/test/common/upstream/cds_api_impl_test.cc b/test/common/upstream/cds_api_impl_test.cc index f99897acf3bc8..574935c6ef263 100644 --- a/test/common/upstream/cds_api_impl_test.cc +++ b/test/common/upstream/cds_api_impl_test.cc @@ -77,12 +77,16 @@ class CdsApiImplTest : public testing::Test { .WillOnce(Invoke( [&](Http::MessagePtr& request, Http::AsyncClient::Callbacks& callbacks, const absl::optional&) -> Http::AsyncClient::Request* { - EXPECT_EQ((Http::TestHeaderMapImpl{ - {":method", v2_rest_ ? "POST" : "GET"}, - {":path", v2_rest_ ? "/v2/discovery:clusters" - : "/v1/clusters/cluster_name/node_name"}, - {":authority", "foo_cluster"}}), - request->headers()); + EXPECT_EQ( + (Http::TestHeaderMapImpl{ + {":method", v2_rest_ ? "POST" : "GET"}, + {":path", + v2_rest_ ? "/v2/discovery:clusters" : "/v1/clusters/cluster_name/node_name"}, + {":authority", "foo_cluster"}, + {"content-type", "application/json"}, + {"content-length", + request->body() ? fmt::FormatInt(request->body()->length()).str() : "0"}}), + request->headers()); callbacks_ = &callbacks; return &request_; })); diff --git a/test/server/lds_api_test.cc b/test/server/lds_api_test.cc index dec19cc34908c..906cfd920d220 100644 --- a/test/server/lds_api_test.cc +++ b/test/server/lds_api_test.cc @@ -82,12 +82,16 @@ class LdsApiTest : public testing::Test { .WillOnce(Invoke( [&](Http::MessagePtr& request, Http::AsyncClient::Callbacks& callbacks, const absl::optional&) -> Http::AsyncClient::Request* { - EXPECT_EQ((Http::TestHeaderMapImpl{ - {":method", v2_rest_ ? "POST" : "GET"}, - {":path", v2_rest_ ? "/v2/discovery:listeners" - : "/v1/listeners/cluster_name/node_name"}, - {":authority", "foo_cluster"}}), - request->headers()); + EXPECT_EQ( + (Http::TestHeaderMapImpl{ + {":method", v2_rest_ ? "POST" : "GET"}, + {":path", v2_rest_ ? "/v2/discovery:listeners" + : "/v1/listeners/cluster_name/node_name"}, + {":authority", "foo_cluster"}, + {"content-type", "application/json"}, + {"content-length", + request->body() ? fmt::FormatInt(request->body()->length()).str() : "0"}}), + request->headers()); callbacks_ = &callbacks; return &request_; }));