From: Willem de Groot Date: Tue, 25 Aug 2015 11:34:52 +0000 (+0200) Subject: Add multi-line header test X-Git-Tag: v4.3.0b1~28^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6e0a0ca5a281317408d5b3bd2444d68829a88f2d;p=thirdparty%2Ftornado.git Add multi-line header test --- diff --git a/tornado/test/httpclient_test.py b/tornado/test/httpclient_test.py index ecc63e4a4..e4325a3c0 100644 --- a/tornado/test/httpclient_test.py +++ b/tornado/test/httpclient_test.py @@ -371,6 +371,30 @@ Transfer-Encoding: chunked "response=%r, value=%r, container=%r" % (resp.body, value, container)) + def test_multi_line_headers(self): + # Multi-line http headers are rare but rfc-allowed + # http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 + sock, port = bind_unused_port() + with closing(sock): + def write_response(stream, request_data): + stream.write(b"""\ +HTTP/1.1 200 OK +X-XSS-Protection: 1; +\tmode=block + +""".replace(b"\n", b"\r\n"), callback=stream.close) + + def accept_callback(conn, address): + stream = IOStream(conn, io_loop=self.io_loop) + stream.read_until(b"\r\n\r\n", + functools.partial(write_response, stream)) + netutil.add_accept_handler(sock, accept_callback, self.io_loop) + self.http_client.fetch("http://127.0.0.1:%d/" % port, self.stop) + resp = self.wait() + resp.rethrow() + self.assertEqual(resp.headers['X-XSS-Protection'], b"1; mode=block") + self.io_loop.remove_handler(sock.fileno()) + def test_304_with_content_length(self): # According to the spec 304 responses SHOULD NOT include # Content-Length or other entity headers, but some servers do it