[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox
Subject:    [PATCH 3/6] httpd: Match If-Modified-Since only when If-None-Match is not present
From:       Sergey Ponomarev <stokito () gmail ! com>
Date:       2021-01-09 21:09:48
Message-ID: 20210109210951.200757-4-stokito () gmail ! com
[Download RAW message or body]

It doesn't make sense to check If-Modified-Since if If-None-Match has a value but \
wasn't matched. https://tools.ietf.org/html/rfc7232#section-3.3

Signed-off-by: Sergey Ponomarev <stokito@gmail.com>
---
 networking/httpd.c | 29 ++++++++++++++++++-----------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/networking/httpd.c b/networking/httpd.c
index 6cd40c13b..93db24f25 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -1791,19 +1791,26 @@ static NOINLINE void send_file_and_exit(const char *url, int \
what)  }
 #endif
 #if ENABLE_FEATURE_HTTPD_LAST_MODIFIED
-	if (G.if_modified_since) {
-		if (DEBUG)
-			bb_perror_msg("If-Modified-Since and file's Last-Modified are: '%s' '%s'\n", \
                G.if_modified_since, G.last_mod_date);
-		/* Simple match If-Modified-Since and Last-Modified as plain string.
-		 * In most cases client will send If-Modified-Since exactly the same as it \
                retrieved on previous GET.
-		 * If a resource wasn't updated then they will be just the same and return 304.
-		 * If resource was updated then client's If-Modified-Since will be outdated and \
                not the same and return 200.
-		 * If the If-Modified-Since is a custom date and not from cached resource then \
                this match will always fail and return 200.
-		 * But such cases normally are not expected. */
-		if (strcmp(G.if_modified_since, G.last_mod_date) == 0) {
-			send_headers_and_exit(HTTP_NOT_MODIFIED);
+	#if ENABLE_FEATURE_HTTPD_ETAG
+	/* if ETag present but wasn't matched then no sense to match by If-Modified-Since \
*/ +	if (!G.if_none_match) {
+	#endif
+		if (G.if_modified_since) {
+			if (DEBUG)
+				bb_perror_msg("If-Modified-Since and file's Last-Modified are: '%s' '%s'\n", \
G.if_modified_since, G.last_mod_date); +			/* Simple match If-Modified-Since and \
Last-Modified as plain string. +			 * In most cases client will send \
If-Modified-Since exactly the same as it retrieved on previous GET. +			 * If a \
resource wasn't updated then they will be just the same and return 304. +			 * If \
resource was updated then client's If-Modified-Since will be outdated and not the \
same and return 200. +			 * If the If-Modified-Since is a custom date and not from \
cached resource then this match will always fail and return 200. +			 * But such \
cases normally are not expected. */ +			if (strcmp(G.if_modified_since, \
G.last_mod_date) == 0) { +				send_headers_and_exit(HTTP_NOT_MODIFIED);
+			}
 		}
+	#if ENABLE_FEATURE_HTTPD_ETAG
 	}
+	#endif
 #endif
 	/* If you want to know about EPIPE below
 	 * (happens if you abort downloads from local httpd): */
-- 
2.27.0

_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic