diff --git a/httplib.h b/httplib.h index 6fa1019..be0c090 100644 --- a/httplib.h +++ b/httplib.h @@ -5544,7 +5544,7 @@ inline bool ClientImpl::process_request(Stream &strm, const Request &req, } // Body - if (req.method != "HEAD" && req.method != "CONNECT") { + if ((res.status != 204) && req.method != "HEAD" && req.method != "CONNECT") { auto out = req.content_receiver_ ? static_cast( diff --git a/test/test.cc b/test/test.cc index 51290ac..c16ffb9 100644 --- a/test/test.cc +++ b/test/test.cc @@ -953,6 +953,31 @@ TEST(ErrorHandlerTest, ContentLength) { ASSERT_FALSE(svr.is_running()); } +TEST(NoContentTest, ContentLength) { + Server svr; + + svr.Get("/hi", [](const Request & /*req*/, Response &res) { + res.status = 204; + }); + auto thread = std::thread([&]() { svr.listen(HOST, PORT); }); + + // Give GET time to get a few messages. + std::this_thread::sleep_for(std::chrono::seconds(1)); + + { + Client cli(HOST, PORT); + + auto res = cli.Get("/hi"); + ASSERT_TRUE(res); + EXPECT_EQ(204, res->status); + EXPECT_EQ("0", res->get_header_value("Content-Length")); + } + + svr.stop(); + thread.join(); + ASSERT_FALSE(svr.is_running()); +} + TEST(RoutingHandlerTest, PreRoutingHandler) { Server svr;