--- x/lighttpd-1.4.23/src/response.c	2009-06-19 19:22:37.000000000 +0200
+++ lighttpd-1.4.23/src/response.c	2009-10-19 22:11:53.000000000 +0200
@@ -44,24 +44,34 @@
 	buffer_append_string_len(b, CONST_STR_LEN(" "));
 	buffer_append_string(b, get_http_status_name(con->http_status));
 
-	/* disable keep-alive if requested */
-	if (con->request_count > con->conf.max_keep_alive_requests) {
-		con->keep_alive = 0;
+	/* HTTP/1.1 requires a Date: header */
+	buffer_append_string_len(b, CONST_STR_LEN("\r\nDate: "));
+
+	/* cache the generated timestamp */
+	if (srv->cur_ts != srv->last_generated_date_ts) {
+		buffer_prepare_copy(srv->ts_date_str, 255);
+
+		strftime(srv->ts_date_str->ptr, srv->ts_date_str->size - 1,
+		"%a, %d %b %Y %H:%M:%S GMT", gmtime(&(srv->cur_ts)));
+
+		srv->ts_date_str->used = strlen(srv->ts_date_str->ptr) + 1;
+
+		srv->last_generated_date_ts = srv->cur_ts;
 	}
 
-	if (con->request.http_version != HTTP_VERSION_1_1 || con->keep_alive == 0) {
-		if (con->keep_alive) {
-			response_header_overwrite(srv, con, CONST_STR_LEN("Connection"), CONST_STR_LEN("keep-alive"));
-		} else {
-			response_header_overwrite(srv, con, CONST_STR_LEN("Connection"), CONST_STR_LEN("close"));
-		}
+	buffer_append_string_buffer(b, srv->ts_date_str);
+
+	if (buffer_is_empty(con->conf.server_tag)) {
+		buffer_append_string_len(b, CONST_STR_LEN("\r\nServer: lighttpd"));
+	} else if (con->conf.server_tag->used > 1) {
+		buffer_append_string_len(b, CONST_STR_LEN("\r\nServer: "));
+		buffer_append_string_encoded(b, CONST_BUF_LEN(con->conf.server_tag), ENCODING_HTTP_HEADER);
 	}
 
 	if (con->response.transfer_encoding & HTTP_TRANSFER_ENCODING_CHUNKED) {
 		response_header_overwrite(srv, con, CONST_STR_LEN("Transfer-Encoding"), CONST_STR_LEN("chunked"));
 	}
 
-
 	/* add all headers */
 	for (i = 0; i < con->response.headers->used; i++) {
 		data_string *ds;
@@ -70,56 +80,28 @@
 
 		if (ds->value->used && ds->key->used &&
 		    0 != strncasecmp(ds->key->ptr, CONST_STR_LEN("X-LIGHTTPD-")) &&
-			0 != strcasecmp(ds->key->ptr, "X-Sendfile")) {
-			if (0 == strcasecmp(ds->key->ptr, "Date")) have_date = 1;
-			if (0 == strcasecmp(ds->key->ptr, "Server")) have_server = 1;
-			if (0 == strcasecmp(ds->key->ptr, "Content-Encoding") && 304 == con->http_status) continue;
+		    0 != strcasecmp(ds->key->ptr, "X-Sendfile")) {
+
+			if (304 == con->http_status && 0 == strcasecmp(ds->key->ptr, "Content-Encoding")) continue;
 
 			buffer_append_string_len(b, CONST_STR_LEN("\r\n"));
 			buffer_append_string_buffer(b, ds->key);
 			buffer_append_string_len(b, CONST_STR_LEN(": "));
-#if 0
-			/** 
-			 * the value might contain newlines, encode them with at least one white-space
-			 */
-			buffer_append_string_encoded(b, CONST_BUF_LEN(ds->value), ENCODING_HTTP_HEADER);
-#else
 			buffer_append_string_buffer(b, ds->value);
-#endif
 		}
 	}
 
-	if (!have_date) {
-		/* HTTP/1.1 requires a Date: header */
-		buffer_append_string_len(b, CONST_STR_LEN("\r\nDate: "));
-
-		/* cache the generated timestamp */
-		if (srv->cur_ts != srv->last_generated_date_ts) {
-			buffer_prepare_copy(srv->ts_date_str, 255);
-
-			strftime(srv->ts_date_str->ptr, srv->ts_date_str->size - 1,
-				 "%a, %d %b %Y %H:%M:%S GMT", gmtime(&(srv->cur_ts)));
-
-			srv->ts_date_str->used = strlen(srv->ts_date_str->ptr) + 1;
-
-			srv->last_generated_date_ts = srv->cur_ts;
-		}
-
-		buffer_append_string_buffer(b, srv->ts_date_str);
-	}
-
-	if (!have_server) {
-		if (buffer_is_empty(con->conf.server_tag)) {
-			buffer_append_string_len(b, CONST_STR_LEN("\r\nServer: " PACKAGE_DESC));
-		} else if (con->conf.server_tag->used > 1) {
-			buffer_append_string_len(b, CONST_STR_LEN("\r\nServer: "));
-			buffer_append_string_encoded(b, CONST_BUF_LEN(con->conf.server_tag), ENCODING_HTTP_HEADER);
+	if (con->request.http_version != HTTP_VERSION_1_1 || con->keep_alive == 0) {
+		buffer_append_string_len(b, CONST_STR_LEN("\r\nConnection: "));
+		if (con->keep_alive) {
+			buffer_append_string_len(b, CONST_STR_LEN("keep-alive"));
+		} else {
+			buffer_append_string_len(b, CONST_STR_LEN("close"));
 		}
 	}
 
 	buffer_append_string_len(b, CONST_STR_LEN("\r\n\r\n"));
 
-
 	con->bytes_header = b->used - 1;
 
 	if (con->conf.log_response_header) {
@@ -130,7 +112,6 @@
 }
 
 
-
 handler_t http_response_prepare(server *srv, connection *con) {
 	handler_t r;
 
