From 65957527cbeab097ab647e2b9b5daf0d5d06d5bc Mon Sep 17 00:00:00 2001 From: Sergey Lyubka Date: Mon, 30 May 2022 17:44:26 +0100 Subject: [PATCH] Fix #1558 - add opts.extra_headers in 304 responses --- mongoose.c | 3 ++- src/http.c | 3 ++- test/unit_test.c | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/mongoose.c b/mongoose.c index 979bdd50..f1bcd660 100644 --- a/mongoose.c +++ b/mongoose.c @@ -1445,7 +1445,8 @@ void mg_http_serve_file(struct mg_connection *c, struct mg_http_message *hm, (inm = mg_http_get_header(hm, "If-None-Match")) != NULL && mg_vcasecmp(inm, etag) == 0) { mg_fs_close(fd); - mg_printf(c, "HTTP/1.1 304 Not Modified\r\nContent-Length: 0\r\n\r\n"); + mg_printf(c, "HTTP/1.1 304 Not Modified\r\n%sContent-Length: 0\r\n\r\n", + opts->extra_headers ? opts->extra_headers : ""); } else { int n, status = 200; char range[100] = ""; diff --git a/src/http.c b/src/http.c index d8690fd2..d91f8148 100644 --- a/src/http.c +++ b/src/http.c @@ -451,7 +451,8 @@ void mg_http_serve_file(struct mg_connection *c, struct mg_http_message *hm, (inm = mg_http_get_header(hm, "If-None-Match")) != NULL && mg_vcasecmp(inm, etag) == 0) { mg_fs_close(fd); - mg_printf(c, "HTTP/1.1 304 Not Modified\r\nContent-Length: 0\r\n\r\n"); + mg_printf(c, "HTTP/1.1 304 Not Modified\r\n%sContent-Length: 0\r\n\r\n", + opts->extra_headers ? opts->extra_headers : ""); } else { int n, status = 200; char range[100] = ""; diff --git a/test/unit_test.c b/test/unit_test.c index 3c680248..11301434 100644 --- a/test/unit_test.c +++ b/test/unit_test.c @@ -655,6 +655,7 @@ static void test_http_server(void) { { extern char *mg_http_etag(char *, size_t, size_t, time_t); + struct mg_http_message hm; char etag[100]; size_t size = 0; time_t mtime = 0; @@ -662,6 +663,9 @@ static void test_http_server(void) { ASSERT(mg_http_etag(etag, sizeof(etag), size, mtime) == etag); ASSERT(fetch(&mgr, buf, url, "GET /a.txt HTTP/1.0\nIf-None-Match: %s\n\n", etag) == 304); + mg_http_parse(buf, strlen(buf), &hm); + ASSERT(mg_http_get_header(&hm, "A") != NULL); + ASSERT(mg_strcmp(*mg_http_get_header(&hm, "A"), mg_str("B")) == 0); } // Text mime type override