tornado.gencoroutine now has better support for the Python 3.7+ contextvars module.
In particular, the ContextVar.reset method is now supported.tornado.http1connectionHEAD requests to handlers that used chunked encoding no longer produce malformed output.gzip data no longer cause an infinite loop.tornado.httpclientdecompress_response=False now works correctly with
curl_httpclient.curl_httpclient
(assuming the version of pycurl is recent enough).User-Agent of Tornado/$VERSION is now used if the
user_agent parameter is not specified.tornado.simple_httpclient always uses GET.
Previously this would use GET if the original request was a POST and
would otherwise reuse the original request method. For curl_httpclient, the
behavior depends on the version of libcurl (with the most recent versions
using GET after 303 regardless of the original method).request_timeout and/or connect_timeout to zero is now supported
to disable the timeout.tornado.httputilparse_body_arguments now accepts incompletely-escaped non-ASCII inputs.tornado.iostreamssl.CertificateError during the SSL handshake is now handled correctly.tornado.loglogging.CRITICAL messages are now
recognized and colored magenta.tornado.netutilEADDRNOTAVAIL is now ignored when binding to localhost with IPv6. This
error is common in docker.tornado.platform.asyncioAnyThreadEventLoopPolicy now also configures a selector event loop for
these threads (the proactor event loop only works on the main thread)tornado.platform.autoset_close_exec function has been removed.tornado.testingExpectLog now has a level argument to ensure that the given log level
is enabled.tornado.webRedirectHandler.get now accepts keyword arguments.Allow) are now preserved.reverse_url correctly handles escaped characters in the regex route.Etag headers are now generated with SHA-512 instead of MD5.tornado.websocketping_interval timer is now stopped when the connection is closed.websocket_connect now raises an error when it encounters a redirect instead of hanging.