Pārlūkot izejas kodu

More compliant 304 response

xtne6f 9 gadi atpakaļ
vecāks
revīzija
f3449a8af5
1 mainītis faili ar 11 papildinājumiem un 5 dzēšanām
  1. 11 5
      src/civetweb.c

+ 11 - 5
src/civetweb.c

@@ -6756,16 +6756,19 @@ handle_static_file_request(struct mg_connection *conn,
 
 
 static void
-handle_not_modified_static_file_request(struct mg_connection *conn)
+handle_not_modified_static_file_request(struct mg_connection *conn,
+                                        struct file *filep)
 {
-	char date[64];
+	char date[64], lm[64], etag[64];
 	time_t curtime = time(NULL);
 
-	if (conn == NULL) {
+	if (conn == NULL || filep == NULL) {
 		return;
 	}
 	conn->status_code = 304;
 	gmt_time_string(date, sizeof(date), &curtime);
+	gmt_time_string(lm, sizeof(lm), &filep->last_modified);
+	construct_etag(etag, sizeof(etag), filep);
 
 	(void)mg_printf(conn,
 	                "HTTP/1.1 %d %s\r\n"
@@ -6775,9 +6778,12 @@ handle_not_modified_static_file_request(struct mg_connection *conn)
 	                date);
 	send_static_cache_header(conn);
 	(void)mg_printf(conn,
-	                "Content-Length: 0\r\n"
+	                "Last-Modified: %s\r\n"
+	                "Etag: %s\r\n"
 	                "Connection: %s\r\n"
 	                "\r\n",
+	                lm,
+	                etag,
 	                suggest_connection_header(conn));
 }
 
@@ -10326,7 +10332,7 @@ handle_file_based_request(struct mg_connection *conn,
 #if !defined(NO_CACHING)
 	} else if ((!conn->in_error_handler) && is_not_modified(conn, file)) {
 		/* Send 304 "Not Modified" - this must not send any body data */
-		handle_not_modified_static_file_request(conn);
+		handle_not_modified_static_file_request(conn, file);
 #endif /* !NO_CACHING */
 	} else {
 		handle_static_file_request(conn, path, file, NULL);