@@ -466,6 +466,7 @@ def handle_one_request(self):
466466 def handle (self ):
467467 """Handle multiple requests if necessary."""
468468 self .close_connection = True
469+ self .default_response_headers = []
469470
470471 self .handle_one_request ()
471472 while not self .close_connection :
@@ -551,13 +552,15 @@ def send_response_only(self, code, message=None):
551552 (self .protocol_version , code , message )).encode (
552553 'latin-1' , 'strict' ))
553554
554- def send_header (self , keyword , value ):
555+ def send_header (self , keyword , value , is_extra = False ):
555556 """Send a MIME header to the headers buffer."""
556557 if self .request_version != 'HTTP/0.9' :
557558 if not hasattr (self , '_headers_buffer' ):
558559 self ._headers_buffer = []
559560 self ._headers_buffer .append (
560561 ("%s: %s\r \n " % (keyword , value )).encode ('latin-1' , 'strict' ))
562+ if not is_extra :
563+ self .default_response_headers .append ((keyword , value ))
561564
562565 if keyword .lower () == 'connection' :
563566 if value .lower () == 'close' :
@@ -758,10 +761,12 @@ def do_HEAD(self):
758761 f .close ()
759762
760763 def _send_extra_response_headers (self ):
761- """Send the headers stored in self.extra_response_headers. """
764+ """Send the headers stored in self.extra_response_headers"""
762765 if self .extra_response_headers is not None :
763766 for header , value in self .extra_response_headers :
764- self .send_header (header , value )
767+ # Don't send the header if it's already sent as part of the default response headers
768+ if header .lower () not in (h .lower () for h , _ in self .default_response_headers ):
769+ self .send_header (header , value , is_extra = True )
765770
766771 def send_head (self ):
767772 """Common code for GET and HEAD commands.
0 commit comments