diff --git a/src/server/response.cpp b/src/server/response.cpp index 7b1e8f803..b0811f63f 100644 --- a/src/server/response.cpp +++ b/src/server/response.cpp @@ -241,12 +241,14 @@ Response::create_entry_mhd_response() const MHD_add_response_header(response, MHD_HTTP_HEADER_CONTENT_TYPE, m_mimeType.c_str()); MHD_add_response_header(response, MHD_HTTP_HEADER_ACCEPT_RANGES, "bytes"); - std::ostringstream oss; - oss << "bytes " << m_byteRange.first() << "-" << m_byteRange.last() - << "/" << m_entry.getSize(); + if ( m_byteRange.kind() == ByteRange::RESOLVED_PARTIAL_CONTENT ) { + std::ostringstream oss; + oss << "bytes " << m_byteRange.first() << "-" << m_byteRange.last() + << "/" << m_entry.getSize(); - MHD_add_response_header(response, - MHD_HTTP_HEADER_CONTENT_RANGE, oss.str().c_str()); + MHD_add_response_header(response, + MHD_HTTP_HEADER_CONTENT_RANGE, oss.str().c_str()); + } MHD_add_response_header(response, MHD_HTTP_HEADER_CONTENT_LENGTH, kiwix::to_string(content_length).c_str()); diff --git a/test/server.cpp b/test/server.cpp index 6031b0e65..9d41ebb69 100644 --- a/test/server.cpp +++ b/test/server.cpp @@ -413,12 +413,15 @@ TEST_F(ServerTest, ValidSingleRangeByteRangeRequestsAreHandledProperly) { const char url[] = "/zimfile/I/m/Ray_Charles_classic_piano_pose.jpg"; const auto full = zfs1_->GET(url); + EXPECT_FALSE(full->has_header("Content-Range")); + EXPECT_EQ("bytes", full->get_header_value("Accept-Ranges")); { const auto p = zfs1_->GET(url, { {"Range", "bytes=0-100000"} } ); EXPECT_EQ(206, p->status); EXPECT_EQ(full->body, p->body); EXPECT_EQ("bytes 0-20076/20077", p->get_header_value("Content-Range")); + EXPECT_EQ("bytes", p->get_header_value("Accept-Ranges")); } { @@ -427,6 +430,7 @@ TEST_F(ServerTest, ValidSingleRangeByteRangeRequestsAreHandledProperly) EXPECT_EQ("bytes 0-10/20077", p->get_header_value("Content-Range")); EXPECT_EQ(11, p->body.size()); EXPECT_EQ(full->body.substr(0, 11), p->body); + EXPECT_EQ("bytes", p->get_header_value("Accept-Ranges")); } { @@ -435,6 +439,7 @@ TEST_F(ServerTest, ValidSingleRangeByteRangeRequestsAreHandledProperly) EXPECT_EQ("bytes 123-456/20077", p->get_header_value("Content-Range")); EXPECT_EQ(334, p->body.size()); EXPECT_EQ(full->body.substr(123, 334), p->body); + EXPECT_EQ("bytes", p->get_header_value("Accept-Ranges")); } { @@ -442,6 +447,7 @@ TEST_F(ServerTest, ValidSingleRangeByteRangeRequestsAreHandledProperly) EXPECT_EQ(206, p->status); EXPECT_EQ(full->body.substr(20000), p->body); EXPECT_EQ("bytes 20000-20076/20077", p->get_header_value("Content-Range")); + EXPECT_EQ("bytes", p->get_header_value("Accept-Ranges")); } { @@ -449,5 +455,6 @@ TEST_F(ServerTest, ValidSingleRangeByteRangeRequestsAreHandledProperly) EXPECT_EQ(206, p->status); EXPECT_EQ(full->body.substr(19977), p->body); EXPECT_EQ("bytes 19977-20076/20077", p->get_header_value("Content-Range")); + EXPECT_EQ("bytes", p->get_header_value("Accept-Ranges")); } }