diff --git a/eventlet/wsgi.py b/eventlet/wsgi.py index f6c96cf..9d02d12 100644 --- a/eventlet/wsgi.py +++ b/eventlet/wsgi.py @@ -601,9 +601,9 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler): else: headers = [h.split(':', 1) for h in headers] - for k, v in headers: + env['headers_raw'] = headers_raw = tuple((k, v.strip()) for k, v in headers) + for k, v in headers_raw: k = k.replace('-', '_').upper() - v = v.strip() if k in env: continue envk = 'HTTP_' + k diff --git a/tests/wsgi_test.py b/tests/wsgi_test.py index 37c4250..6b3c251 100644 --- a/tests/wsgi_test.py +++ b/tests/wsgi_test.py @@ -1515,6 +1515,19 @@ class TestHttpd(_TestBase): finally: shutil.rmtree(tempdir) + def test_headers_raw(self): + def app(environ, start_response): + start_response('200 OK', []) + return [b'\n'.join('{0}: {1}'.format(*kv).encode() for kv in environ['headers_raw'])] + + self.spawn_server(site=app) + sock = eventlet.connect(self.server_addr) + sock.sendall(b'GET / HTTP/1.1\r\nHost: localhost\r\nx-ANY_k: one\r\nx-ANY_k: two\r\n\r\n') + result = read_http(sock) + sock.close() + assert result.status == 'HTTP/1.1 200 OK' + assert result.body == b'Host: localhost\nx-ANY_k: one\nx-ANY_k: two' + def read_headers(sock): fd = sock.makefile('rb')