💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
### Navigation - [index](# "General Index") - [modules](# "Python Module Index") | - [next](# "What鈥檚 new in Tornado 2.2.1") | - [previous](# "What鈥檚 new in Tornado 2.4") | - [Tornado 4.4.dev1 documentation](#) » - [Release notes](#) » # What's new in Tornado 2.3 ### May 31, 2012 ### HTTP clients - [`tornado.httpclient.HTTPClient`](# "tornado.httpclient.HTTPClient") now supports the same constructorkeyword arguments as [`AsyncHTTPClient`](# "tornado.httpclient.AsyncHTTPClient"). - The `max_clients` keyword argument to [`AsyncHTTPClient.configure`](# "tornado.httpclient.AsyncHTTPClient.configure") now works. - `tornado.simple_httpclient` now supports the `OPTIONS` and `PATCH`HTTP methods. - `tornado.simple_httpclient` is better about closing its socketsinstead of leaving them for garbage collection. - `tornado.simple_httpclient` correctly verifies SSL certificates forURLs containing IPv6 literals (This bug affected Python 2.5 and 2.6). - `tornado.simple_httpclient` no longer includes basic auth credentialsin the `Host` header when those credentials are extracted from the URL. - `tornado.simple_httpclient` no longer modifies the caller-supplied headerdictionary, which caused problems when following redirects. - `tornado.curl_httpclient` now supports client SSL certificates (usingthe same `client_cert` and `client_key` arguments as`tornado.simple_httpclient`) ### HTTP Server - [`HTTPServer`](# "tornado.httpserver.HTTPServer") now works correctly with paths starting with `//` - `HTTPHeaders.copy` (inherited from [`dict.copy`](https://docs.python.org/3.4/library/stdtypes.html#dict.copy "(in Python v3.4)") [https://docs.python.org/3.4/library/stdtypes.html#dict.copy]) now works correctly. - `HTTPConnection.address` is now always the socket address, even for non-IPsockets. `HTTPRequest.remote_ip` is still always an IP-style address(fake data is used for non-IP sockets) - Extra data at the end of multipart form bodies is now ignored, which fixesa compatibility problem with an iOS HTTP client library. ### `IOLoop` and `IOStream` - [`IOStream`](# "tornado.iostream.IOStream") now has an `error` attribute that can be used to determinewhy a socket was closed. - `tornado.iostream.IOStream.read_until` and `read_until_regex` are muchfaster with large input. - `IOStream.write` performs better when given very large strings. - [`IOLoop.instance()`](# "tornado.ioloop.IOLoop.instance") is now thread-safe. ### `tornado.options` - [`tornado.options`](# "tornado.options") options with `multiple=True` that are set more thanonce now overwrite rather than append. This makes it possible to overridevalues set in `parse_config_file` with `parse_command_line`. - [`tornado.options`](# "tornado.options")`--help` output is now prettier. - [`tornado.options.options`](# "tornado.options.options") now supports attribute assignment. ### `tornado.template` - Template files containing non-ASCII (utf8) characters now work on Python 3regardless of the locale environment variables. - Templates now support `else` clauses in`try`/`except`/`finally`/`else` blocks. ### `tornado.web` - [`tornado.web.RequestHandler`](# "tornado.web.RequestHandler") now supports the `PATCH` HTTP method.Note that this means any existing methods named `patch` in`RequestHandler` subclasses will need to be renamed. - [`tornado.web.addslash`](# "tornado.web.addslash") and `removeslash` decorators now send permanentredirects (301) instead of temporary (302). - [`RequestHandler.flush`](# "tornado.web.RequestHandler.flush") now invokes its callback whether there was any datato flush or not. - Repeated calls to [`RequestHandler.set_cookie`](# "tornado.web.RequestHandler.set_cookie") with the same name nowoverwrite the previous cookie instead of producing additional copies. - `tornado.web.OutputTransform.transform_first_chunk` now takes and returnsa status code in addition to the headers and chunk. This is abackwards-incompatible change to an interface that was never technicallyprivate, but was not included in the documentation and does not appearto have been used outside Tornado itself. - Fixed a bug on python versions before 2.6.5 when [`URLSpec`](# "tornado.web.URLSpec") regexesare constructed from unicode strings and keyword arguments are extracted. - The `reverse_url` function in the template namespace now comes fromthe [`RequestHandler`](# "tornado.web.RequestHandler") rather than the [`Application`](# "tornado.web.Application"). (Unless overridden,[`RequestHandler.reverse_url`](# "tornado.web.RequestHandler.reverse_url") is just an alias for the [`Application`](# "tornado.web.Application")method). - The `Etag` header is now returned on 304 responses to an `If-None-Match`request, improving compatibility with some caches. - [`tornado.web`](# "tornado.web") will no longer produce responses with status code 304that also have entity headers such as `Content-Length`. ### Other modules - [`tornado.auth.FacebookGraphMixin`](# "tornado.auth.FacebookGraphMixin") no longer sends `post_args` redundantlyin the url. - The `extra_params` argument to [`tornado.escape.linkify`](# "tornado.escape.linkify") may now bea callable, to allow parameters to be chosen separately for each link. - [`tornado.gen`](# "tornado.gen") no longer leaks `StackContexts` when a `@gen.engine` wrappedfunction is called repeatedly. - [`tornado.locale.get_supported_locales`](# "tornado.locale.get_supported_locales") no longer takes a meaningless`cls` argument. - [`StackContext`](# "tornado.stack_context.StackContext") instances now have a deactivation callback that can beused to prevent further propagation. - [`tornado.testing.AsyncTestCase.wait`](# "tornado.testing.AsyncTestCase.wait") now resets its timeout on each call. - [`tornado.wsgi.WSGIApplication`](# "tornado.wsgi.WSGIApplication") now parses arguments correctly on Python 3. - Exception handling on Python 3 has been improved; previously some exceptionssuch as [`UnicodeDecodeError`](https://docs.python.org/3.4/library/exceptions.html#UnicodeDecodeError "(in Python v3.4)") [https://docs.python.org/3.4/library/exceptions.html#UnicodeDecodeError] would generate `TypeErrors` © Copyright 2009-2016, The Tornado Authors. Created using [Sphinx](http://sphinx-doc.org/) 1.3.5.