- Updated and expanded WebSocket support.
- Improved compatibility in the Twisted/Tornado bridge.
- Template errors now generate better stack traces.
- Better exception handling in tornado.gen.
tornado.simple_httpclient
now disables SSLv2 in all cases. Previously SSLv2 would be allowed if the Python interpreter was linked against a pre-1.0 version of OpenSSL.
- tornado.process.fork_processes now raises SystemExit if all child processes exit cleanly rather than returning
None
. The old behavior was surprising and inconsistent with most of the documented examples of this function (which did not check the return value). - On Python 2.6,
tornado.simple_httpclient
only supports SSLv3. This is because Python 2.6 does not expose a way to support both SSLv3 and TLSv1 without also supporting the insecure SSLv2. - tornado.websocket no longer supports the older "draft 76" version of the websocket protocol by default, although this version can be enabled by overriding
tornado.websocket.WebSocketHandler.allow_draft76
.
SimpleAsyncHTTPClient
no longer hangs onHEAD
requests, responses with no content, or emptyPOST
/PUT
response bodies.SimpleAsyncHTTPClient
now supports 303 and 307 redirect codes.tornado.curl_httpclient
now accepts non-integer timeouts.tornado.curl_httpclient
now supports basic authentication with an empty password.
- .HTTPServer with
xheaders=True
will no longer acceptX-Real-IP
headers that don't look like valid IP addresses. - .HTTPServer now treats the
Connection
request header as case-insensitive.
IOStream.write
now works correctly when given an empty string.IOStream.read_until
(andread_until_regex
) now perform better when there is a lot of buffered data, which improves peformance ofSimpleAsyncHTTPClient
when downloading files with lots of chunks.- .SSLIOStream now works correctly when
ssl_version
is set to a value other thanSSLv23
. - Idle
IOLoops
no longer wake up several times a second. - tornado.ioloop.PeriodicCallback no longer triggers duplicate callbacks when stopped and started repeatedly.
- Exceptions in template code will now show better stack traces that reference lines from the original template file.
{#
and#}
can now be used for comments (and unlike the old{% comment %}
directive, these can wrap other template directives).- Template directives may now span multiple lines.
- Now behaves better when given malformed
Cookie
headers - .RequestHandler.redirect now has a
status
argument to send status codes other than 301 and 302. - New method .RequestHandler.on_finish may be overridden for post-request processing (as a counterpart to .RequestHandler.prepare)
- .StaticFileHandler now outputs
Content-Length
andEtag
headers onHEAD
requests. - .StaticFileHandler now has overridable
get_version
andparse_url_path
methods for use in subclasses. - .RequestHandler.static_url now takes an
include_host
parameter (in addition to the old support for theRequestHandler.include_host
attribute).
- Updated to support the latest version of the protocol, as finalized in RFC 6455.
- Many bugs were fixed in all supported protocol versions.
- tornado.websocket no longer supports the older "draft 76" version of the websocket protocol by default, although this version can be enabled by overriding
tornado.websocket.WebSocketHandler.allow_draft76
. - .WebSocketHandler.write_message now accepts a
binary
argument to send binary messages. - Subprotocols (i.e. the
Sec-WebSocket-Protocol
header) are now supported; see the .WebSocketHandler.select_subprotocol method for details. .WebSocketHandler.get_websocket_scheme
can be used to select the appropriate url scheme (ws://
orwss://
) in cases whereHTTPRequest.protocol
is not set correctly.
- tornado.auth.TwitterMixin.authenticate_redirect now takes a
callback_uri
parameter. - tornado.auth.TwitterMixin.twitter_request now accepts both URLs and partial paths (complete URLs are useful for the search API which follows different patterns).
- Exception handling in tornado.gen has been improved. It is now possible to catch exceptions thrown by a
Task
. - tornado.netutil.bind_sockets now works when
getaddrinfo
returns duplicate addresses. - tornado.platform.twisted compatibility has been significantly improved. Twisted version 11.1.0 is now supported in addition to 11.0.0.
- tornado.process.fork_processes correctly reseeds the random module even when os.urandom is not implemented.
- tornado.testing.main supports a new flag
--exception_on_interrupt
, which can be set to false to makeCtrl-C
kill the process more reliably (at the expense of stack traces when it does so). tornado.version_info
is now a four-tuple so official releases can be distinguished from development branches.