]> granicus.if.org Git - python/commitdiff
Issue #10980: encode headers with latin1 instead of ASCII in the HTTP server.
authorArmin Ronacher <armin.ronacher@active-4.com>
Sat, 22 Jan 2011 13:13:05 +0000 (13:13 +0000)
committerArmin Ronacher <armin.ronacher@active-4.com>
Sat, 22 Jan 2011 13:13:05 +0000 (13:13 +0000)
This makes the implementation of PEP 3333 compliant servers on top of
BaseHTTPServer possible.

Lib/http/server.py
Lib/test/test_httpservers.py
Misc/NEWS

index 515572f5471424466aebcd98333e6af7874e86ba..543abe0c9f949a46eb1bb5e39ff467a75455dee1 100644 (file)
@@ -448,7 +448,7 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
                 message = ''
         if self.request_version != 'HTTP/0.9':
             self.wfile.write(("%s %d %s\r\n" %
-                              (self.protocol_version, code, message)).encode('ASCII', 'strict'))
+                              (self.protocol_version, code, message)).encode('latin1', 'strict'))
 
     def send_header(self, keyword, value):
         """Send a MIME header."""
@@ -456,7 +456,7 @@ class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
             if not hasattr(self, '_headers_buffer'):
                 self._headers_buffer = []
             self._headers_buffer.append(
-                ("%s: %s\r\n" % (keyword, value)).encode('ASCII', 'strict'))
+                ("%s: %s\r\n" % (keyword, value)).encode('latin1', 'strict'))
 
         if keyword.lower() == 'connection':
             if value.lower() == 'close':
index e42038aadc32f3aa3f165a7d649e1b09702a3eac..2cc94a9acbbb331f01270cf474651bb93af8cd74 100644 (file)
@@ -97,6 +97,11 @@ class BaseHTTPServerTestCase(BaseTestCase):
             self.send_header('Connection', 'close')
             self.end_headers()
 
+        def do_LATINONEHEADER(self):
+            self.send_response(999)
+            self.send_header('X-Special', 'Dängerous Mind')
+            self.end_headers()
+
     def setUp(self):
         BaseTestCase.setUp(self)
         self.con = http.client.HTTPConnection('localhost', self.PORT)
@@ -194,6 +199,11 @@ class BaseHTTPServerTestCase(BaseTestCase):
         res = self.con.getresponse()
         self.assertEqual(res.status, 999)
 
+    def test_latin1_header(self):
+        self.con.request('LATINONEHEADER', '/')
+        res = self.con.getresponse()
+        self.assertEqual(res.getheader('X-Special'), 'Dängerous Mind')
+
 
 class SimpleHTTPServerTestCase(BaseTestCase):
     class request_handler(NoLogRequestHandler, SimpleHTTPRequestHandler):
index 28923c70441f2ffc3ac42ba07833aed759b6fa1e..3b55447d81f905426b8656b5d4646138dc1a6ae4 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -29,6 +29,10 @@ Library
 - Issue #10898: Allow compiling the posix module when the C library defines
   a symbol named FSTAT.
 
+- Issue #10980: the HTTP server now encodes headers with iso-8859-1 (latin1)
+  encoding.  This is the preferred encoding of PEP 3333 and the base encoding
+  of HTTP 1.1.
+
 
 What's New in Python 3.2 Release Candidate 1
 ============================================