]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Don't put wsgi response headers in a dictionary to support repeated
authorBen Darnell <bdarnell@beaker.local>
Mon, 22 Mar 2010 23:35:05 +0000 (16:35 -0700)
committerBen Darnell <bdarnell@beaker.local>
Mon, 22 Mar 2010 23:35:05 +0000 (16:35 -0700)
headers with the same value (mainly important for Set-Cookie)

tornado/wsgi.py

index fca3b35f6dc8fe16e40a264bef00ca66cbfa7678..7979112194f16a1d1036dbeaa74b3ab8faf8dc34 100644 (file)
@@ -212,7 +212,7 @@ class WSGIContainer(object):
         data = {}
         def start_response(status, response_headers, exc_info=None):
             data["status"] = status
-            data["headers"] = HTTPHeaders(response_headers)
+            data["headers"] = response_headers
         response = self.wsgi_application(
             WSGIContainer.environ(request), start_response)
         body = "".join(response)
@@ -222,13 +222,17 @@ class WSGIContainer(object):
 
         status_code = int(data["status"].split()[0])
         headers = data["headers"]
+        header_set = set(k.lower() for (k,v) in headers)
         body = escape.utf8(body)
-        headers["Content-Length"] = str(len(body))
-        headers.setdefault("Content-Type", "text/html; charset=UTF-8")
-        headers.setdefault("Server", "TornadoServer/0.1")
+        if "content-length" not in header_set:
+            headers.append(("Content-Length", str(len(body))))
+        if "content-type" not in header_set:
+            headers.append(("Content-Type", "text/html; charset=UTF-8"))
+        if "server" not in header_set:
+            headers.append(("Server", "TornadoServer/0.1"))
 
         parts = ["HTTP/1.1 " + data["status"] + "\r\n"]
-        for key, value in headers.iteritems():
+        for key, value in headers:
             parts.append(escape.utf8(key) + ": " + escape.utf8(value) + "\r\n")
         parts.append("\r\n")
         parts.append(body)