diff --git a/tornado/httpserver.py b/tornado/httpserver.py
index 226f966a..13a6e92f 100644
--- a/tornado/httpserver.py
+++ b/tornado/httpserver.py
@@ -37,11 +37,9 @@ from tornado import httputil
 from tornado import iostream
 from tornado import netutil
 from tornado.tcpserver import TCPServer
-from tornado.util import Configurable
 
 
-class HTTPServer(TCPServer, Configurable,
-                 httputil.HTTPServerConnectionDelegate):
+class HTTPServer(TCPServer, httputil.HTTPServerConnectionDelegate):
     r"""A non-blocking, single-threaded HTTP server.
 
     A server is defined by a subclass of `.HTTPServerConnectionDelegate`,
@@ -122,20 +120,12 @@ class HTTPServer(TCPServer, Configurable,
        two arguments ``(server_conn, request_conn)`` (in accordance with the
        documentation) instead of one ``(request_conn)``.
     """
-    def __init__(self, *args, **kwargs):
-        # Ignore args to __init__; real initialization belongs in
-        # initialize since we're Configurable. (there's something
-        # weird in initialization order between this class,
-        # Configurable, and TCPServer so we can't leave __init__ out
-        # completely)
-        pass
-
-    def initialize(self, request_callback, no_keep_alive=False, io_loop=None,
-                   xheaders=False, ssl_options=None, protocol=None,
-                   decompress_request=False,
-                   chunk_size=None, max_header_size=None,
-                   idle_connection_timeout=None, body_timeout=None,
-                   max_body_size=None, max_buffer_size=None):
+    def __init__(self, request_callback, no_keep_alive=False, io_loop=None,
+                 xheaders=False, ssl_options=None, protocol=None,
+                 decompress_request=False,
+                 chunk_size=None, max_header_size=None,
+                 idle_connection_timeout=None, body_timeout=None,
+                 max_body_size=None, max_buffer_size=None):
         self.request_callback = request_callback
         self.no_keep_alive = no_keep_alive
         self.xheaders = xheaders
@@ -152,14 +142,6 @@ class HTTPServer(TCPServer, Configurable,
                            read_chunk_size=chunk_size)
         self._connections = set()
 
-    @classmethod
-    def configurable_base(cls):
-        return HTTPServer
-
-    @classmethod
-    def configurable_default(cls):
-        return HTTPServer
-
     @gen.coroutine
     def close_all_connections(self):
         while self._connections:
diff --git a/tornado/simple_httpclient.py b/tornado/simple_httpclient.py
index 6321a81d..f3cb1b86 100644
--- a/tornado/simple_httpclient.py
+++ b/tornado/simple_httpclient.py
@@ -135,14 +135,10 @@ class SimpleAsyncHTTPClient(AsyncHTTPClient):
                 release_callback = functools.partial(self._release_fetch, key)
                 self._handle_request(request, release_callback, callback)
 
-    def _connection_class(self):
-        return _HTTPConnection
-
     def _handle_request(self, request, release_callback, final_callback):
-        self._connection_class()(
-            self.io_loop, self, request, release_callback,
-            final_callback, self.max_buffer_size, self.tcp_client,
-            self.max_header_size)
+        _HTTPConnection(self.io_loop, self, request, release_callback,
+                        final_callback, self.max_buffer_size, self.tcp_client,
+                        self.max_header_size)
 
     def _release_fetch(self, key):
         del self.active[key]
@@ -352,7 +348,14 @@ class _HTTPConnection(httputil.HTTPMessageDelegate):
             self.request.headers["Accept-Encoding"] = "gzip"
         req_path = ((self.parsed.path or '/') +
                     (('?' + self.parsed.query) if self.parsed.query else ''))
-        self.connection = self._create_connection(stream)
+        self.stream.set_nodelay(True)
+        self.connection = HTTP1Connection(
+            self.stream, True,
+            HTTP1ConnectionParameters(
+                no_keep_alive=True,
+                max_header_size=self.max_header_size,
+                decompress=self.request.decompress_response),
+            self._sockaddr)
         start_line = httputil.RequestStartLine(self.request.method,
                                                req_path, '')
         self.connection.write_headers(start_line, self.request.headers)
@@ -361,20 +364,10 @@ class _HTTPConnection(httputil.HTTPMessageDelegate):
         else:
             self._write_body(True)
 
-    def _create_connection(self, stream):
-        stream.set_nodelay(True)
-        connection = HTTP1Connection(
-            stream, True,
-            HTTP1ConnectionParameters(
-                no_keep_alive=True,
-                max_header_size=self.max_header_size,
-                decompress=self.request.decompress_response),
-            self._sockaddr)
-        return connection
-
     def _write_body(self, start_read):
         if self.request.body is not None:
             self.connection.write(self.request.body)
+            self.connection.finish()
         elif self.request.body_producer is not None:
             fut = self.request.body_producer(self.connection.write)
             if is_future(fut):
@@ -385,7 +378,7 @@ class _HTTPConnection(httputil.HTTPMessageDelegate):
                         self._read_response()
                 self.io_loop.add_future(fut, on_body_written)
                 return
-        self.connection.finish()
+            self.connection.finish()
         if start_read:
             self._read_response()
 
diff --git a/tornado/util.py b/tornado/util.py
index 606ced19..d943ce2b 100644
--- a/tornado/util.py
+++ b/tornado/util.py
@@ -198,21 +198,21 @@ class Configurable(object):
     __impl_class = None
     __impl_kwargs = None
 
-    def __new__(cls, *args, **kwargs):
+    def __new__(cls, **kwargs):
         base = cls.configurable_base()
-        init_kwargs = {}
+        args = {}
         if cls is base:
             impl = cls.configured_class()
             if base.__impl_kwargs:
-                init_kwargs.update(base.__impl_kwargs)
+                args.update(base.__impl_kwargs)
         else:
             impl = cls
-        init_kwargs.update(kwargs)
+        args.update(kwargs)
         instance = super(Configurable, cls).__new__(impl)
         # initialize vs __init__ chosen for compatibility with AsyncHTTPClient
         # singleton magic.  If we get rid of that we can switch to __init__
         # here too.
-        instance.initialize(*args, **init_kwargs)
+        instance.initialize(**args)
         return instance
 
     @classmethod
@@ -233,9 +233,6 @@ class Configurable(object):
         """Initialize a `Configurable` subclass instance.
 
         Configurable classes should use `initialize` instead of ``__init__``.
-
-        .. versionchanged:: 4.2
-           Now accepts positional arguments in addition to keyword arguments.
         """
 
     @classmethod
diff --git a/tornado/web.py b/tornado/web.py
index 62f3779d..155da550 100644
--- a/tornado/web.py
+++ b/tornado/web.py
@@ -650,8 +650,7 @@ class RequestHandler(object):
         else:
             assert isinstance(status, int) and 300 <= status <= 399
         self.set_status(status)
-        self.set_header("Location", urlparse.urljoin(utf8(self.request.uri),
-                                                     utf8(url)))
+        self.set_header("Location", utf8(url))
         self.finish()
 
     def write(self, chunk):

redirect requests starting with '//' to '/' leading to wrong place
Tornado uses `urljoin` to join `self.request.uri` and the destination but when `self.request.uri` starts with '//' it generates locations still start with '//' because this behaviour of `urljoin`:

```
>>> from urllib.parse import urljoin                                                                                                                   
>>> urljoin('//abc', '/abc')
'//abc/abc'
```

I suggest using `self.request.full_url()` instead. Also, the HTTP specification says that the Location header should include the host part.

PS: `self.request.full_url()` doesn't work for proxy requests that have full urls in their request line.
diff --git a/tornado/test/httpserver_test.py b/tornado/test/httpserver_test.py
index c1ba831c..62ef6ca3 100644
--- a/tornado/test/httpserver_test.py
+++ b/tornado/test/httpserver_test.py
@@ -162,22 +162,19 @@ class BadSSLOptionsTest(unittest.TestCase):
         application = Application()
         module_dir = os.path.dirname(__file__)
         existing_certificate = os.path.join(module_dir, 'test.crt')
-        existing_key = os.path.join(module_dir, 'test.key')
 
-        self.assertRaises((ValueError, IOError),
-                          HTTPServer, application, ssl_options={
-                              "certfile": "/__mising__.crt",
+        self.assertRaises(ValueError, HTTPServer, application, ssl_options={
+                          "certfile": "/__mising__.crt",
                           })
-        self.assertRaises((ValueError, IOError),
-                          HTTPServer, application, ssl_options={
-                              "certfile": existing_certificate,
-                              "keyfile": "/__missing__.key"
+        self.assertRaises(ValueError, HTTPServer, application, ssl_options={
+                          "certfile": existing_certificate,
+                          "keyfile": "/__missing__.key"
                           })
 
         # This actually works because both files exist
         HTTPServer(application, ssl_options={
                    "certfile": existing_certificate,
-                   "keyfile": existing_key,
+                   "keyfile": existing_certificate
                    })
 
 
diff --git a/tornado/test/runtests.py b/tornado/test/runtests.py
index cb9969d3..20133d4e 100644
--- a/tornado/test/runtests.py
+++ b/tornado/test/runtests.py
@@ -8,7 +8,6 @@ import operator
 import textwrap
 import sys
 from tornado.httpclient import AsyncHTTPClient
-from tornado.httpserver import HTTPServer
 from tornado.ioloop import IOLoop
 from tornado.netutil import Resolver
 from tornado.options import define, options, add_parse_callback
@@ -124,8 +123,6 @@ def main():
     define('httpclient', type=str, default=None,
            callback=lambda s: AsyncHTTPClient.configure(
                s, defaults=dict(allow_ipv6=False)))
-    define('httpserver', type=str, default=None,
-           callback=HTTPServer.configure)
     define('ioloop', type=str, default=None)
     define('ioloop_time_monotonic', default=False)
     define('resolver', type=str, default=None,
diff --git a/tornado/test/util_test.py b/tornado/test/util_test.py
index 0936c89a..a0fbae43 100644
--- a/tornado/test/util_test.py
+++ b/tornado/test/util_test.py
@@ -46,15 +46,13 @@ class TestConfigurable(Configurable):
 
 
 class TestConfig1(TestConfigurable):
-    def initialize(self, pos_arg=None, a=None):
+    def initialize(self, a=None):
         self.a = a
-        self.pos_arg = pos_arg
 
 
 class TestConfig2(TestConfigurable):
-    def initialize(self, pos_arg=None, b=None):
+    def initialize(self, b=None):
         self.b = b
-        self.pos_arg = pos_arg
 
 
 class ConfigurableTest(unittest.TestCase):
@@ -104,10 +102,9 @@ class ConfigurableTest(unittest.TestCase):
         self.assertIsInstance(obj, TestConfig1)
         self.assertEqual(obj.a, 3)
 
-        obj = TestConfigurable(42, a=4)
+        obj = TestConfigurable(a=4)
         self.assertIsInstance(obj, TestConfig1)
         self.assertEqual(obj.a, 4)
-        self.assertEqual(obj.pos_arg, 42)
 
         self.checkSubclasses()
         # args bound in configure don't apply when using the subclass directly
@@ -120,10 +117,9 @@ class ConfigurableTest(unittest.TestCase):
         self.assertIsInstance(obj, TestConfig2)
         self.assertEqual(obj.b, 5)
 
-        obj = TestConfigurable(42, b=6)
+        obj = TestConfigurable(b=6)
         self.assertIsInstance(obj, TestConfig2)
         self.assertEqual(obj.b, 6)
-        self.assertEqual(obj.pos_arg, 42)
 
         self.checkSubclasses()
         # args bound in configure don't apply when using the subclass directly
diff --git a/tornado/test/web_test.py b/tornado/test/web_test.py
index f3c8505a..a52f1667 100644
--- a/tornado/test/web_test.py
+++ b/tornado/test/web_test.py
@@ -597,6 +597,7 @@ class WSGISafeWebTest(WebTestCase):
             url("/redirect", RedirectHandler),
             url("/web_redirect_permanent", WebRedirectHandler, {"url": "/web_redirect_newpath"}),
             url("/web_redirect", WebRedirectHandler, {"url": "/web_redirect_newpath", "permanent": False}),
+            url("//web_redirect_double_slash", WebRedirectHandler, {"url": '/web_redirect_newpath'}),
             url("/header_injection", HeaderInjectionHandler),
             url("/get_argument", GetArgumentHandler),
             url("/get_arguments", GetArgumentsHandler),
@@ -730,6 +731,11 @@ js_embed()
         self.assertEqual(response.code, 302)
         self.assertEqual(response.headers['Location'], '/web_redirect_newpath')
 
+    def test_web_redirect_double_slash(self):
+        response = self.fetch("//web_redirect_double_slash", follow_redirects=False)
+        self.assertEqual(response.code, 301)
+        self.assertEqual(response.headers['Location'], '/web_redirect_newpath')
+
     def test_header_injection(self):
         response = self.fetch("/header_injection")
         self.assertEqual(response.body, b"ok")
diff --git a/tornado/testing.py b/tornado/testing.py
index 93f0dbe1..3d3bcf72 100644
--- a/tornado/testing.py
+++ b/tornado/testing.py
@@ -417,8 +417,10 @@ class AsyncHTTPSTestCase(AsyncHTTPTestCase):
     Interface is generally the same as `AsyncHTTPTestCase`.
     """
     def get_http_client(self):
-        return AsyncHTTPClient(io_loop=self.io_loop, force_instance=True,
-                               defaults=dict(validate_cert=False))
+        # Some versions of libcurl have deadlock bugs with ssl,
+        # so always run these tests with SimpleAsyncHTTPClient.
+        return SimpleAsyncHTTPClient(io_loop=self.io_loop, force_instance=True,
+                                     defaults=dict(validate_cert=False))
 
     def get_httpserver_options(self):
         return dict(ssl_options=self.get_ssl_options())

pip install -e .
parse_log_pytest
requirements.txt
pytest
apt-get update apt-get install -y gcc
3.6
maint/requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
autopep8==1.1
certifi==14.5.14
coverage==3.7.1
docutils==0.12
flake8==2.3.0
importlib-metadata==4.8.3
iniconfig==1.1.1
Jinja2==2.7.3
MarkupSafe==0.23
mccabe==0.3
packaging==21.3
pep8==1.6.0
pkginfo==1.2.1
pluggy==1.0.0
py==1.11.0
pycurl==7.19.5.1
pyflakes==0.8.1
Pygments==2.0.2
pyparsing==3.1.4
pytest==7.0.1
requests==2.5.1
Sphinx==1.2.3
sphinx-rtd-theme==0.1.6
tomli==1.2.3
-e git+https://github.com/tornadoweb/tornado.git@cf2a54794ff5067d6d815013d6570ee10f74d5e5#egg=tornado
tox==1.8.1
twine==1.4.0
Twisted==15.0.0
typing_extensions==4.1.1
virtualenv==12.0.7
zipp==3.6.0
zope.interface==4.1.2

name: tornado
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - autopep8==1.1
      - certifi==14.5.14
      - coverage==3.7.1
      - docutils==0.12
      - flake8==2.3.0
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - jinja2==2.7.3
      - markupsafe==0.23
      - mccabe==0.3
      - packaging==21.3
      - pep8==1.6.0
      - pkginfo==1.2.1
      - pluggy==1.0.0
      - py==1.11.0
      - pycurl==7.19.5.1
      - pyflakes==0.8.1
      - pygments==2.0.2
      - pyparsing==3.1.4
      - pytest==7.0.1
      - requests==2.5.1
      - sphinx==1.2.3
      - sphinx-rtd-theme==0.1.6
      - tomli==1.2.3
      - tox==1.8.1
      - twine==1.4.0
      - twisted==15.0.0
      - typing-extensions==4.1.1
      - virtualenv==12.0.7
      - zipp==3.6.0
      - zope-interface==4.1.2
prefix: /opt/conda/envs/tornado

tornado/test/web_test.py::WSGISafeWebTest::test_web_redirect_double_slash
tornado/test/httpserver_test.py::HTTPServerRawTest::test_malformed_first_line tornado/test/httpserver_test.py::HTTPServerRawTest::test_malformed_headers tornado/test/httpserver_test.py::UnixSocketTest::test_unix_socket_bad_request tornado/test/httpserver_test.py::MaxHeaderSizeTest::test_large_headers tornado/test/httpserver_test.py::BodyLimitsTest::test_body_size_override_reset tornado/test/httpserver_test.py::BodyLimitsTest::test_large_body_buffered tornado/test/httpserver_test.py::BodyLimitsTest::test_large_body_buffered_chunked tornado/test/httpserver_test.py::BodyLimitsTest::test_large_body_streaming tornado/test/httpserver_test.py::BodyLimitsTest::test_large_body_streaming_chunked tornado/test/httpserver_test.py::BodyLimitsTest::test_timeout tornado/test/web_test.py::ClearAllCookiesTest::test_clear_all_cookies
tornado/test/httpserver_test.py::SSLv23Test::test_large_post tornado/test/httpserver_test.py::SSLv23Test::test_non_ssl_request tornado/test/httpserver_test.py::SSLv23Test::test_ssl tornado/test/httpserver_test.py::SSLv3Test::test_large_post tornado/test/httpserver_test.py::SSLv3Test::test_non_ssl_request tornado/test/httpserver_test.py::SSLv3Test::test_ssl tornado/test/httpserver_test.py::TLSv1Test::test_large_post tornado/test/httpserver_test.py::TLSv1Test::test_non_ssl_request tornado/test/httpserver_test.py::TLSv1Test::test_ssl tornado/test/httpserver_test.py::SSLContextTest::test_large_post tornado/test/httpserver_test.py::SSLContextTest::test_non_ssl_request tornado/test/httpserver_test.py::SSLContextTest::test_ssl tornado/test/httpserver_test.py::BadSSLOptionsTest::test_missing_arguments tornado/test/httpserver_test.py::BadSSLOptionsTest::test_missing_key tornado/test/httpserver_test.py::HTTPConnectionTest::test_100_continue tornado/test/httpserver_test.py::HTTPConnectionTest::test_multipart_form tornado/test/httpserver_test.py::HTTPConnectionTest::test_newlines tornado/test/httpserver_test.py::HTTPServerTest::test_double_slash tornado/test/httpserver_test.py::HTTPServerTest::test_empty_post_parameters tornado/test/httpserver_test.py::HTTPServerTest::test_empty_query_string tornado/test/httpserver_test.py::HTTPServerTest::test_malformed_body tornado/test/httpserver_test.py::HTTPServerTest::test_query_string_encoding tornado/test/httpserver_test.py::HTTPServerTest::test_types tornado/test/httpserver_test.py::HTTPServerRawTest::test_chunked_request_body tornado/test/httpserver_test.py::HTTPServerRawTest::test_empty_request tornado/test/httpserver_test.py::XHeaderTest::test_ip_headers tornado/test/httpserver_test.py::XHeaderTest::test_scheme_headers tornado/test/httpserver_test.py::SSLXHeaderTest::test_request_without_xprotocol tornado/test/httpserver_test.py::ManualProtocolTest::test_manual_protocol tornado/test/httpserver_test.py::UnixSocketTest::test_unix_socket tornado/test/httpserver_test.py::KeepAliveTest::test_cancel_during_download tornado/test/httpserver_test.py::KeepAliveTest::test_finish_while_closed tornado/test/httpserver_test.py::KeepAliveTest::test_http10 tornado/test/httpserver_test.py::KeepAliveTest::test_http10_keepalive tornado/test/httpserver_test.py::KeepAliveTest::test_http10_keepalive_extra_crlf tornado/test/httpserver_test.py::KeepAliveTest::test_keepalive_chunked tornado/test/httpserver_test.py::KeepAliveTest::test_pipelined_cancel tornado/test/httpserver_test.py::KeepAliveTest::test_pipelined_requests tornado/test/httpserver_test.py::KeepAliveTest::test_request_close tornado/test/httpserver_test.py::KeepAliveTest::test_two_requests tornado/test/httpserver_test.py::GzipTest::test_gzip tornado/test/httpserver_test.py::GzipTest::test_uncompressed tornado/test/httpserver_test.py::GzipUnsupportedTest::test_gzip_unsupported tornado/test/httpserver_test.py::GzipUnsupportedTest::test_uncompressed tornado/test/httpserver_test.py::StreamingChunkSizeTest::test_chunked_body tornado/test/httpserver_test.py::StreamingChunkSizeTest::test_chunked_compressed tornado/test/httpserver_test.py::StreamingChunkSizeTest::test_compressed_body tornado/test/httpserver_test.py::StreamingChunkSizeTest::test_regular_body tornado/test/httpserver_test.py::MaxHeaderSizeTest::test_small_headers tornado/test/httpserver_test.py::IdleTimeoutTest::test_idle_after_use tornado/test/httpserver_test.py::IdleTimeoutTest::test_unused_connection tornado/test/httpserver_test.py::BodyLimitsTest::test_large_body_streaming_chunked_override tornado/test/httpserver_test.py::BodyLimitsTest::test_large_body_streaming_override tornado/test/httpserver_test.py::BodyLimitsTest::test_small_body tornado/test/httpserver_test.py::LegacyInterfaceTest::test_legacy_interface tornado/test/util_test.py::RaiseExcInfoTest::test_two_arg_exception tornado/test/util_test.py::ConfigurableTest::test_config_args tornado/test/util_test.py::ConfigurableTest::test_config_class tornado/test/util_test.py::ConfigurableTest::test_config_class_args tornado/test/util_test.py::ConfigurableTest::test_default tornado/test/util_test.py::UnicodeLiteralTest::test_unicode_escapes tornado/test/util_test.py::ArgReplacerTest::test_keyword tornado/test/util_test.py::ArgReplacerTest::test_omitted tornado/test/util_test.py::ArgReplacerTest::test_position tornado/test/util_test.py::TimedeltaToSecondsTest::test_timedelta_to_seconds tornado/test/util_test.py::ImportObjectTest::test_import_member tornado/test/util_test.py::ImportObjectTest::test_import_member_unicode tornado/test/util_test.py::ImportObjectTest::test_import_module tornado/test/util_test.py::ImportObjectTest::test_import_module_unicode tornado/test/web_test.py::SecureCookieV1Test::test_arbitrary_bytes tornado/test/web_test.py::SecureCookieV1Test::test_cookie_tampering_future_timestamp tornado/test/web_test.py::SecureCookieV1Test::test_round_trip tornado/test/web_test.py::CookieTest::test_cookie_special_char tornado/test/web_test.py::CookieTest::test_get_cookie tornado/test/web_test.py::CookieTest::test_set_cookie tornado/test/web_test.py::CookieTest::test_set_cookie_domain tornado/test/web_test.py::CookieTest::test_set_cookie_expires_days tornado/test/web_test.py::CookieTest::test_set_cookie_false_flags tornado/test/web_test.py::CookieTest::test_set_cookie_max_age tornado/test/web_test.py::CookieTest::test_set_cookie_overwrite tornado/test/web_test.py::AuthRedirectTest::test_absolute_auth_redirect tornado/test/web_test.py::AuthRedirectTest::test_relative_auth_redirect tornado/test/web_test.py::ConnectionCloseTest::test_connection_close tornado/test/web_test.py::RequestEncodingTest::test_group_encoding tornado/test/web_test.py::RequestEncodingTest::test_group_question_mark tornado/test/web_test.py::RequestEncodingTest::test_slashes tornado/test/web_test.py::WSGISafeWebTest::test_decode_argument tornado/test/web_test.py::WSGISafeWebTest::test_decode_argument_invalid_unicode tornado/test/web_test.py::WSGISafeWebTest::test_decode_argument_plus tornado/test/web_test.py::WSGISafeWebTest::test_get_argument tornado/test/web_test.py::WSGISafeWebTest::test_get_body_arguments tornado/test/web_test.py::WSGISafeWebTest::test_get_query_arguments tornado/test/web_test.py::WSGISafeWebTest::test_header_injection tornado/test/web_test.py::WSGISafeWebTest::test_multi_header tornado/test/web_test.py::WSGISafeWebTest::test_no_gzip tornado/test/web_test.py::WSGISafeWebTest::test_optional_path tornado/test/web_test.py::WSGISafeWebTest::test_redirect tornado/test/web_test.py::WSGISafeWebTest::test_reverse_url tornado/test/web_test.py::WSGISafeWebTest::test_types tornado/test/web_test.py::WSGISafeWebTest::test_uimodule_resources tornado/test/web_test.py::WSGISafeWebTest::test_uimodule_unescaped tornado/test/web_test.py::WSGISafeWebTest::test_web_redirect tornado/test/web_test.py::NonWSGIWebTests::test_empty_flush tornado/test/web_test.py::NonWSGIWebTests::test_flow_control tornado/test/web_test.py::ErrorResponseTest::test_default tornado/test/web_test.py::ErrorResponseTest::test_failed_write_error tornado/test/web_test.py::ErrorResponseTest::test_write_error tornado/test/web_test.py::StaticFileTest::test_absolute_static_url tornado/test/web_test.py::StaticFileTest::test_absolute_version_exclusion tornado/test/web_test.py::StaticFileTest::test_include_host_override tornado/test/web_test.py::StaticFileTest::test_relative_version_exclusion tornado/test/web_test.py::StaticFileTest::test_static_304_if_modified_since tornado/test/web_test.py::StaticFileTest::test_static_304_if_none_match tornado/test/web_test.py::StaticFileTest::test_static_404 tornado/test/web_test.py::StaticFileTest::test_static_etag tornado/test/web_test.py::StaticFileTest::test_static_files tornado/test/web_test.py::StaticFileTest::test_static_head tornado/test/web_test.py::StaticFileTest::test_static_head_range tornado/test/web_test.py::StaticFileTest::test_static_if_modified_since_pre_epoch tornado/test/web_test.py::StaticFileTest::test_static_if_modified_since_time_zone tornado/test/web_test.py::StaticFileTest::test_static_invalid_range tornado/test/web_test.py::StaticFileTest::test_static_range_if_none_match tornado/test/web_test.py::StaticFileTest::test_static_unsatisfiable_range_invalid_start tornado/test/web_test.py::StaticFileTest::test_static_unsatisfiable_range_zero_suffix tornado/test/web_test.py::StaticFileTest::test_static_url tornado/test/web_test.py::StaticFileTest::test_static_with_range tornado/test/web_test.py::StaticFileTest::test_static_with_range_end_edge tornado/test/web_test.py::StaticFileTest::test_static_with_range_full_file tornado/test/web_test.py::StaticFileTest::test_static_with_range_full_past_end tornado/test/web_test.py::StaticFileTest::test_static_with_range_neg_end tornado/test/web_test.py::StaticFileTest::test_static_with_range_partial_past_end tornado/test/web_test.py::StaticDefaultFilenameTest::test_static_default_filename tornado/test/web_test.py::StaticDefaultFilenameTest::test_static_default_redirect tornado/test/web_test.py::StaticFileWithPathTest::test_serve tornado/test/web_test.py::CustomStaticFileTest::test_serve tornado/test/web_test.py::CustomStaticFileTest::test_static_url tornado/test/web_test.py::HostMatchingTest::test_host_matching tornado/test/web_test.py::NamedURLSpecGroupsTest::test_named_urlspec_groups tornado/test/web_test.py::ClearHeaderTest::test_clear_header tornado/test/web_test.py::Header304Test::test_304_headers tornado/test/web_test.py::StatusReasonTest::test_status tornado/test/web_test.py::DateHeaderTest::test_date_header tornado/test/web_test.py::RaiseWithReasonTest::test_httperror_str tornado/test/web_test.py::RaiseWithReasonTest::test_raise_with_reason tornado/test/web_test.py::ErrorHandlerXSRFTest::test_404_xsrf tornado/test/web_test.py::ErrorHandlerXSRFTest::test_error_xsrf tornado/test/web_test.py::GzipTestCase::test_gzip tornado/test/web_test.py::GzipTestCase::test_gzip_not_requested tornado/test/web_test.py::GzipTestCase::test_gzip_static tornado/test/web_test.py::GzipTestCase::test_vary_already_present tornado/test/web_test.py::PathArgsInPrepareTest::test_kw tornado/test/web_test.py::PathArgsInPrepareTest::test_pos tornado/test/web_test.py::ExceptionHandlerTest::test_http_error tornado/test/web_test.py::ExceptionHandlerTest::test_known_error tornado/test/web_test.py::ExceptionHandlerTest::test_unknown_error tornado/test/web_test.py::BuggyLoggingTest::test_buggy_log_exception tornado/test/web_test.py::UIMethodUIModuleTest::test_ui_method tornado/test/web_test.py::GetArgumentErrorTest::test_catch_error tornado/test/web_test.py::MultipleExceptionTest::test_multi_exception tornado/test/web_test.py::SetLazyPropertiesTest::test_set_properties tornado/test/web_test.py::GetCurrentUserTest::test_get_current_user_from_ui_module_is_lazy tornado/test/web_test.py::GetCurrentUserTest::test_get_current_user_from_ui_module_works tornado/test/web_test.py::GetCurrentUserTest::test_get_current_user_works tornado/test/web_test.py::UnimplementedHTTPMethodsTest::test_unimplemented_standard_methods tornado/test/web_test.py::UnimplementedNonStandardMethodsTest::test_unimplemented_other tornado/test/web_test.py::UnimplementedNonStandardMethodsTest::test_unimplemented_patch tornado/test/web_test.py::AllHTTPMethodsTest::test_standard_methods tornado/test/web_test.py::PatchMethodTest::test_other tornado/test/web_test.py::PatchMethodTest::test_patch tornado/test/web_test.py::FinishInPrepareTest::test_finish_in_prepare tornado/test/web_test.py::Default404Test::test_404 tornado/test/web_test.py::Custom404Test::test_404 tornado/test/web_test.py::DefaultHandlerArgumentsTest::test_403 tornado/test/web_test.py::HandlerByNameTest::test_handler_by_name tornado/test/web_test.py::StreamingRequestBodyTest::test_close_during_upload tornado/test/web_test.py::StreamingRequestBodyTest::test_early_return tornado/test/web_test.py::StreamingRequestBodyTest::test_early_return_with_data tornado/test/web_test.py::StreamingRequestBodyTest::test_streaming_body tornado/test/web_test.py::StreamingRequestFlowControlTest::test_flow_control tornado/test/web_test.py::IncorrectContentLengthTest::test_content_length_too_high tornado/test/web_test.py::IncorrectContentLengthTest::test_content_length_too_low tornado/test/web_test.py::ClientCloseTest::test_client_close tornado/test/web_test.py::SignedValueTest::test_expired tornado/test/web_test.py::SignedValueTest::test_known_values tornado/test/web_test.py::SignedValueTest::test_name_swap tornado/test/web_test.py::SignedValueTest::test_non_ascii tornado/test/web_test.py::SignedValueTest::test_payload_tampering tornado/test/web_test.py::SignedValueTest::test_signature_tampering tornado/test/web_test.py::XSRFTest::test_cross_user tornado/test/web_test.py::XSRFTest::test_distinct_tokens tornado/test/web_test.py::XSRFTest::test_refresh_token tornado/test/web_test.py::XSRFTest::test_versioning tornado/test/web_test.py::XSRFTest::test_xsrf_fail_body_no_cookie tornado/test/web_test.py::XSRFTest::test_xsrf_fail_cookie_no_body tornado/test/web_test.py::XSRFTest::test_xsrf_fail_no_token tornado/test/web_test.py::XSRFTest::test_xsrf_success_header tornado/test/web_test.py::XSRFTest::test_xsrf_success_non_hex_token tornado/test/web_test.py::XSRFTest::test_xsrf_success_post_body tornado/test/web_test.py::XSRFTest::test_xsrf_success_query_string tornado/test/web_test.py::XSRFTest::test_xsrf_success_short_token tornado/test/web_test.py::FinishExceptionTest::test_finish_exception tornado/test/web_test.py::DecoratorTest::test_addslash tornado/test/web_test.py::DecoratorTest::test_removeslash tornado/test/web_test.py::CacheTest::test_multiple_strong_etag_match tornado/test/web_test.py::CacheTest::test_multiple_strong_etag_not_match tornado/test/web_test.py::CacheTest::test_multiple_weak_etag_match tornado/test/web_test.py::CacheTest::test_multiple_weak_etag_not_match tornado/test/web_test.py::CacheTest::test_strong_etag_match tornado/test/web_test.py::CacheTest::test_strong_etag_not_match tornado/test/web_test.py::CacheTest::test_weak_etag_match tornado/test/web_test.py::CacheTest::test_weak_etag_not_match tornado/test/web_test.py::CacheTest::test_wildcard_etag tornado/test/web_test.py::RequestSummaryTest::test_missing_remote_ip
tornado/util.py tornado/web.py tornado/simple_httpclient.py tornado/httpserver.py
tornado/util.py tornado/web.py tornado/simple_httpclient.py tornado/httpserver.py