Description
================================== Async http client/server framework ================================== .. image:: https://raw.githubusercontent.com/aio-libs/aiohttp/master/docs/aiohttp-plain.svg :height: 64px :width: 64px :alt: aiohttp logo | .. image:: https://github.com/aio-libs/aiohttp/workflows/CI/badge.svg :target: https://github.com/aio-libs/aiohttp/actions?query=workflow%3ACI :alt: GitHub Actions status for master branch .. image:: https://codecov.io/gh/aio-libs/aiohttp/branch/master/graph/badge.svg :target: https://codecov.io/gh/aio-libs/aiohttp :alt: codecov.io status for master branch .. image:: https://badge.fury.io/py/aiohttp.svg :target: https://pypi.org/project/aiohttp :alt: Latest PyPI package version .. image:: https://img.shields.io/pypi/dm/aiohttp :target: https://pypistats.org/packages/aiohttp :alt: Downloads count .. image:: https://readthedocs.org/projects/aiohttp/badge/?version=latest :target: https://docs.aiohttp.org/ :alt: Latest Read The Docs .. image:: https://img.shields.io/endpoint?url=https://codspeed.io/badge.json :target: https://codspeed.io/aio-libs/aiohttp :alt: Codspeed.io status for aiohttp Key Features ============ - Supports both client and server side of HTTP protocol. - Supports both client and server Web-Sockets out-of-the-box and avoids Callback Hell. - Provides Web-server with middleware and pluggable routing. Getting started =============== Client ------ To get something from the web: .. code-block:: python import aiohttp import asyncio async def main(): async with aiohttp.ClientSession() as session: async with session.get('http://python.org') as response: print("Status:", response.status) print("Content-type:", response.headers['content-type']) html = await response.text() print("Body:", html[:15], "...") asyncio.run(main()) This prints: .. code-block:: Status: 200 Content-type: text/html; charset=utf-8 Body: <!doctype html> ... Coming from `requests <https://requests.readthedocs.io/>`_ ? Read `why we need so many lines <https://aiohttp.readthedocs.io/en/latest/http_request_lifecycle.html>`_. Server ------ An example using a simple server: .. code-block:: python # examples/server_simple.py from aiohttp import web async def handle(request): name = request.match_info.get('name', "Anonymous") text = "Hello, " + name return web.Response(text=text) async def wshandle(request): ws = web.WebSocketResponse() await ws.prepare(request) async for msg in ws: if msg.type == web.WSMsgType.text: await ws.send_str("Hello, {}".format(msg.data)) elif msg.type == web.WSMsgType.binary: await ws.send_bytes(msg.data) elif msg.type == web.WSMsgType.close: break return ws app = web.Application() app.add_routes([web.get('/', handle), web.get('/echo', wshandle), web.get('/{name}', handle)]) if __name__ == '__main__': web.run_app(app) Documentation ============= https://aiohttp.readthedocs.io/ Demos ===== https://github.com/aio-libs/aiohttp-demos External links ============== * `Third party libraries <http://aiohttp.readthedocs.io/en/latest/third_party.html>`_ * `Built with aiohttp <http://aiohttp.readthedocs.io/en/latest/built_with.html>`_ * `Powered by aiohttp <http://aiohttp.readthedocs.io/en/latest/powered_by.html>`_ Feel free to make a Pull Request for adding your link to these pages! Communication channels ====================== *aio-libs Discussions*: https://github.com/aio-libs/aiohttp/discussions *Matrix*: `#aio-libs:matrix.org <https://matrix.to/#/#aio-libs:matrix.org>`_ We support `Stack Overflow <https://stackoverflow.com/questions/tagged/aiohttp>`_. Please add *aiohttp* tag to your question there. Requirements ============ - attrs_ - multidict_ - yarl_ - frozenlist_ Optionally you may install the aiodns_ library (highly recommended for sake of speed). .. _aiodns: https://pypi.python.org/pypi/aiodns .. _attrs: https://github.com/python-attrs/attrs .. _multidict: https://pypi.python.org/pypi/multidict .. _frozenlist: https://pypi.org/project/frozenlist/ .. _yarl: https://pypi.python.org/pypi/yarl .. _async-timeout: https://pypi.python.org/pypi/async_timeout License ======= ``aiohttp`` is offered under the Apache 2 license. Keepsafe ======== The aiohttp community would like to thank Keepsafe (https://www.getkeepsafe.com) for its support in the early days of the project. Source code =========== The latest developer version is available in a GitHub repository: https://github.com/aio-libs/aiohttp Benchmarks ========== If you are interested in efficiency, the AsyncIO community maintains a list of benchmarks on the official wiki: https://github.com/python/asyncio/w
Release History
| Version | Changes | Urgency | Date |
|---|---|---|---|
| 3.13.5 | Imported from PyPI (3.13.5) | Low | 4/21/2026 |
| v3.13.5 | Bug fixes --------- - Skipped the duplicate singleton header check in lax mode (the default for response parsing). In strict mode (request parsing, or ``-X dev``), all RFC 9110 singletons are still enforced -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #12302. ---- | Medium | 3/31/2026 |
| v3.13.4 | Features -------- - Added ``max_headers`` parameter to limit the number of headers that should be read from a response -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* #11955. - Added a ``dns_cache_max_size`` parameter to ``TCPConnector`` to limit the size of the cache -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* #12106. Bug fixes --------- - Fixed server hanging indefinitely when chunked transfer encoding chunk-size d | Medium | 3/28/2026 |
| v3.13.3 | This release contains fixes for several vulnerabilities. It is advised to upgrade as soon as possible. Bug fixes --------- - Fixed proxy authorization headers not being passed when reusing a connection, which caused 407 (Proxy authentication required) errors -- by :user:`GLeurquin`. *Related issues and pull requests on GitHub:* #2596. - Fixed multipart reading failing when encountering an empty body part -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* | Low | 1/3/2026 |
| v3.13.2 | Bug fixes --------- - Fixed cookie parser to continue parsing subsequent cookies when encountering a malformed cookie that fails regex validation, such as Google's ``g_state`` cookie with unescaped quotes -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #11632. - Fixed loading netrc credentials from the default :file:`~/.netrc` (:file:`~/_netrc` on Windows) location when the :envvar:`NETRC` environment variable is not set -- by :user:`bdraco`. *Related issues and | Low | 10/28/2025 |
| v3.13.1 | Features -------- - Make configuration options in ``AppRunner`` also available in ``run_app()`` -- by :user:`Cycloctane`. *Related issues and pull requests on GitHub:* #11633. Bug fixes --------- - Switched to `backports.zstd` for Python <3.14 and fixed zstd decompression for chunked zstd streams -- by :user:`ZhaoMJ`. Note: Users who installed ``zstandard`` for support on Python <3.14 will now need to install ``backports.zstd`` instead (installing ``aiohttp[speedups]`` will do | Low | 10/17/2025 |
| v3.13.0 | Features -------- - Added support for Python 3.14. *Related issues and pull requests on GitHub:* #10851, #10872. - Added support for free-threading in Python 3.14+ -- by :user:`kumaraditya303`. *Related issues and pull requests on GitHub:* #11466, #11464. - Added support for Zstandard (aka Zstd) compression -- by :user:`KGuillaume-chaps`. *Related issues and pull requests on GitHub:* #11161. - Added ``StreamReader.total_raw_bytes`` to check the number of bytes downl | Low | 10/6/2025 |
| v3.12.15 | Bug fixes --------- - Fixed :class:`~aiohttp.DigestAuthMiddleware` to preserve the algorithm case from the server's challenge in the authorization response. This improves compatibility with servers that perform case-sensitive algorithm matching (e.g., servers expecting ``algorithm=MD5-sess`` instead of ``algorithm=MD5-SESS``) -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #11352. Improved documentation ---------------------- - Remove outdated contents of ``aioh | Low | 7/29/2025 |
| v3.12.14 | Bug fixes --------- - Fixed file uploads failing with HTTP 422 errors when encountering 307/308 redirects, and 301/302 redirects for non-POST methods, by preserving the request body when appropriate per :rfc:`9110#section-15.4.3-3.1` -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #11270. - Fixed :py:meth:`ClientSession.close() <aiohttp.ClientSession.close>` hanging indefinitely when using HTTPS requests through HTTP proxies -- by :user:`bdraco`. *Related issues | Low | 7/10/2025 |
| v3.12.13 | Bug fixes --------- - Fixed auto-created :py:class:`~aiohttp.TCPConnector` not using the session's event loop when :py:class:`~aiohttp.ClientSession` is created without an explicit connector -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #11147. ---- | Low | 6/14/2025 |
| v3.12.12 | Bug fixes --------- - Fixed cookie unquoting to properly handle octal escape sequences in cookie values (e.g., ``\012`` for newline) by vendoring the correct ``_unquote`` implementation from Python's ``http.cookies`` module -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #11173. - Fixed ``Cookie`` header parsing to treat attribute names as regular cookies per :rfc:`6265#section-5.4` -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #11178. | Low | 6/10/2025 |
| v3.12.11 | Features -------- - Improved SSL connection handling by changing the default ``ssl_shutdown_timeout`` from ``0.1`` to ``0`` seconds. SSL connections now use Python's default graceful shutdown during normal operation but are aborted immediately when the connector is closed, providing optimal behavior for both cases. Also added support for ``ssl_shutdown_timeout=0`` on all Python versions. Previously, this value was rejected on Python 3.11+ and ignored on earlier versions. Non-zero valu | Low | 6/7/2025 |
| v3.12.10 | Bug fixes --------- - Fixed leak of ``aiodns.DNSResolver`` when :py:class:`~aiohttp.TCPConnector` is closed and no resolver was passed when creating the connector -- by :user:`Tasssadar`. This was a regression introduced in version 3.12.0 (:pr:`10897`). *Related issues and pull requests on GitHub:* #11150. ---- | Low | 6/7/2025 |
| v3.12.9 | Bug fixes --------- - Fixed ``IOBasePayload`` and ``TextIOPayload`` reading entire files into memory when streaming large files -- by :user:`bdraco`. When using file-like objects with the aiohttp client, the entire file would be read into memory if the file size was provided in the ``Content-Length`` header. This could cause out-of-memory errors when uploading large files. The payload classes now correctly read data in chunks of ``READ_SIZE`` (64KB) regardless of the total content length. | Low | 6/4/2025 |
| v3.12.8 | Features -------- - Added preemptive digest authentication to :class:`~aiohttp.DigestAuthMiddleware` -- by :user:`bdraco`. The middleware now reuses authentication credentials for subsequent requests to the same protection space, improving efficiency by avoiding extra authentication round trips. This behavior matches how web browsers handle digest authentication and follows :rfc:`7616#section-3.6`. Preemptive authentication is enabled by default but can be disabled by passing ``pr | Low | 6/4/2025 |
| v3.12.7 | > [!WARNING] > This release fixes an issue where the `quote_cookie` parameter was not being properly respected for shared cookies (domain="", path=""). If your server does not handle quoted cookies correctly, you may need to disable cookie quoting by setting `quote_cookie=False` when creating your `ClientSession` or `CookieJar`. > See https://docs.aiohttp.org/en/stable/client_advanced.html#cookie-quoting-routine for details. Bug fixes --------- - Fixed cookie parsing to be more lenient | Low | 6/2/2025 |
| v3.12.7rc0 | Bug fixes --------- - Fixed cookie parsing to be more lenient when handling cookies with special characters in names or values. Cookies with characters like ``{``, ``}``, and ``/`` in names are now accepted instead of causing a :exc:`~http.cookies.CookieError` and 500 errors. Additionally, cookies with mismatched quotes in values are now parsed correctly, and quoted cookie values are now handled consistently whether or not they include special attributes like ``Domain``. Also fixed :c | Low | 6/2/2025 |
| v3.12.6 | Bug fixes --------- - Fixed spurious "Future exception was never retrieved" warnings for connection lost errors when the connector is not closed -- by :user:`bdraco`. When connections are lost, the exception is now marked as retrieved since it is always propagated through other means, preventing unnecessary warnings in logs. *Related issues and pull requests on GitHub:* #11100. ---- | Low | 5/31/2025 |
| v3.12.5 | ## This release failed to upload to PyPI because sigstore failed with 502 Server Error: Bad Gateway for url: https://rekor.sigstore.dev/api/v1/log/entries/. A new release will need to be made. Features -------- - Added ``ssl_shutdown_timeout`` parameter to :py:class:`~aiohttp.ClientSession` and :py:class:`~aiohttp.TCPConnector` to control the grace period for SSL shutdown handshake on TLS connections. This helps prevent "connection reset" errors on the server side while avoiding excessi | Low | 5/31/2025 |
| v3.12.4 | Bug fixes --------- - Fixed connector not waiting for connections to close before returning from :meth:`~aiohttp.BaseConnector.close` (partial backport of :pr:`3733`) -- by :user:`atemate` and :user:`bdraco`. *Related issues and pull requests on GitHub:* #1925, #11074. ---- | Low | 5/29/2025 |
| v3.12.3 | Bug fixes --------- - Fixed memory leak in :py:meth:`~aiohttp.CookieJar.filter_cookies` that caused unbounded memory growth when making requests to different URL paths -- by :user:`bdraco` and :user:`Cycloctane`. *Related issues and pull requests on GitHub:* #11052, #11054. ---- | Low | 5/28/2025 |
| v3.12.2 | Bug fixes --------- - Fixed ``Content-Length`` header not being set to ``0`` for non-GET requests with ``None`` body -- by :user:`bdraco`. Non-GET requests (``POST``, ``PUT``, ``PATCH``, ``DELETE``) with ``None`` as the body now correctly set the ``Content-Length`` header to ``0``, matching the behavior of requests with empty bytes (``b""``). This regression was introduced in aiohttp 3.12.1. *Related issues and pull requests on GitHub:* #11035. ---- | Low | 5/26/2025 |
| v3.12.1 | Features -------- - Added support for reusable request bodies to enable retries, redirects, and digest authentication -- by :user:`bdraco` and :user:`GLGDLY`. Most payloads can now be safely reused multiple times, fixing long-standing issues where POST requests with form data or file uploads would fail on redirects with errors like "Form data has been processed already" or "I/O operation on closed file". This also enables digest authentication to work with request bodies and allows retry mec | Low | 5/26/2025 |
| v3.12.1rc0 | Features -------- - Added support for reusable request bodies to enable retries, redirects, and digest authentication -- by :user:`bdraco` and :user:`GLGDLY`. Most payloads can now be safely reused multiple times, fixing long-standing issues where POST requests with form data or file uploads would fail on redirects with errors like "Form data has been processed already" or "I/O operation on closed file". This also enables digest authentication to work with request bodies and allows retry mec | Low | 5/26/2025 |
| v3.12.0 | Bug fixes --------- - Fixed :py:attr:`~aiohttp.web.WebSocketResponse.prepared` property to correctly reflect the prepared state, especially during timeout scenarios -- by :user:`bdraco` *Related issues and pull requests on GitHub:* #6009, #10988. - Response is now always True, instead of using MutableMapping behaviour (False when map is empty) *Related issues and pull requests on GitHub:* #10119. - Fixed connection reuse for file-like data payloads by ensuring buffer truncat | Low | 5/24/2025 |
| v3.12.0rc1 | Bug fixes --------- - Fixed :py:attr:`~aiohttp.web.WebSocketResponse.prepared` property to correctly reflect the prepared state, especially during timeout scenarios -- by :user:`bdraco` *Related issues and pull requests on GitHub:* #6009, #10988. - Response is now always True, instead of using MutableMapping behaviour (False when map is empty) *Related issues and pull requests on GitHub:* #10119. - Fixed connection reuse for file-like data payloads by ensuring buffer truncat | Low | 5/24/2025 |
| v3.12.0rc0 | Bug fixes --------- - Fixed :py:attr:`~aiohttp.web.WebSocketResponse.prepared` property to correctly reflect the prepared state, especially during timeout scenarios -- by :user:`bdraco` *Related issues and pull requests on GitHub:* #6009, #10988. - Response is now always True, instead of using MutableMapping behaviour (False when map is empty) *Related issues and pull requests on GitHub:* #10119. - Fixed connection reuse for file-like data payloads by ensuring buffer truncat | Low | 5/24/2025 |
| v3.12.0b3 | Bug fixes --------- - Response is now always True, instead of using MutableMapping behaviour (False when map is empty) *Related issues and pull requests on GitHub:* #10119. - Fixed connection reuse for file-like data payloads by ensuring buffer truncation respects content-length boundaries and preventing premature connection closure race -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10325, #10915, #10941, #10943. - Fixed pytest plugin to not use depr | Low | 5/22/2025 |
| v3.12.0b2 | Bug fixes --------- - Response is now always True, instead of using MutableMapping behaviour (False when map is empty) *Related issues and pull requests on GitHub:* #10119. - Fixed connection reuse for file-like data payloads by ensuring buffer truncation respects content-length boundaries and preventing premature connection closure race -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10325, #10915, #10941, #10943. - Fixed pytest plugin to not use depr | Low | 5/22/2025 |
| v3.12.0b1 | Bug fixes --------- - Response is now always True, instead of using MutableMapping behaviour (False when map is empty) *Related issues and pull requests on GitHub:* #10119. - Fixed connection reuse for file-like data payloads by ensuring buffer truncation respects content-length boundaries and preventing premature connection closure race -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10325, #10915. - Fixed pytest plugin to not use deprecated :py:mod:` | Low | 5/22/2025 |
| v3.12.0b0 | Bug fixes --------- - Response is now always True, instead of using MutableMapping behaviour (False when map is empty) *Related issues and pull requests on GitHub:* #10119. - Fixed pytest plugin to not use deprecated :py:mod:`asyncio` policy APIs. *Related issues and pull requests on GitHub:* #10851. Features -------- - Added a comprehensive HTTP Digest Authentication client middleware (DigestAuthMiddleware) that implements RFC 7616. The middleware supports all standard ha | Low | 5/20/2025 |
| v3.11.18 | Bug fixes --------- - Disabled TLS in TLS warning (when using HTTPS proxies) for uvloop and newer Python versions -- by :user:`lezgomatt`. *Related issues and pull requests on GitHub:* #7686. - Fixed reading fragmented WebSocket messages when the payload was masked -- by :user:`bdraco`. The problem first appeared in 3.11.17 *Related issues and pull requests on GitHub:* #10764. ---- | Low | 4/21/2025 |
| v3.11.17 | Miscellaneous internal changes ------------------------------ - Optimized web server performance when access logging is disabled by reducing time syscalls -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10713. - Improved web server performance when connection can be reused -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10714. - Improved performance of the WebSocket reader -- by :user:`bdraco`. *Related issues and pull requests on | Low | 4/19/2025 |
| v3.11.16 | Bug fixes --------- - Replaced deprecated ``asyncio.iscoroutinefunction`` with its counterpart from ``inspect`` -- by :user:`layday`. *Related issues and pull requests on GitHub:* #10634. - Fixed :class:`multidict.CIMultiDict` being mutated when passed to :class:`aiohttp.web.Response` -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10672. ---- | Low | 4/2/2025 |
| v3.11.15 | Bug fixes --------- - Reverted explicitly closing sockets if an exception is raised during ``create_connection`` -- by :user:`bdraco`. This change originally appeared in aiohttp 3.11.13 *Related issues and pull requests on GitHub:* #10464, #10617, #10656. Miscellaneous internal changes ------------------------------ - Improved performance of WebSocket buffer handling -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10601. - Improved performance of seri | Low | 4/1/2025 |
| v3.11.14 | Bug fixes --------- - Fixed an issue where dns queries were delayed indefinitely when an exception occurred in a ``trace.send_dns_cache_miss`` -- by :user:`logioniz`. *Related issues and pull requests on GitHub:* #10529. - Fixed DNS resolution on platforms that don't support ``socket.AI_ADDRCONFIG`` -- by :user:`maxbachmann`. *Related issues and pull requests on GitHub:* #10542. - The connector now raises :exc:`aiohttp.ClientConnectionError` instead of :exc:`OSError` when fa | Low | 3/17/2025 |
| v3.11.13 | Bug fixes --------- - Removed a break statement inside the finally block in :py:class:`~aiohttp.web.RequestHandler` -- by :user:`Cycloctane`. *Related issues and pull requests on GitHub:* #10434. - Changed connection creation to explicitly close sockets if an exception is raised in the event loop's ``create_connection`` method -- by :user:`top-oai`. *Related issues and pull requests on GitHub:* #10464. Packaging updates and notes for downstreams ---------------------------- | Low | 2/24/2025 |
| v3.11.12 | Bug fixes --------- - ``MultipartForm.decode()`` now follows RFC1341 7.2.1 with a ``CRLF`` after the boundary -- by :user:`imnotjames`. *Related issues and pull requests on GitHub:* #10270. - Restored the missing ``total_bytes`` attribute to ``EmptyStreamReader`` -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10387. Features -------- - Updated :py:func:`~aiohttp.request` to make it accept ``_RequestOptions`` kwargs. -- by :user:`Cycloctane`. *Re | Low | 2/6/2025 |
| v3.11.11 | Bug fixes --------- - Updated :py:meth:`~aiohttp.ClientSession.request` to reuse the ``quote_cookie`` setting from ``ClientSession._cookie_jar`` when processing cookies parameter. -- by :user:`Cycloctane`. *Related issues and pull requests on GitHub:* #10093. - Fixed type of ``SSLContext`` for some static type checkers (e.g. pyright). *Related issues and pull requests on GitHub:* #10099. - Updated :meth:`aiohttp.web.StreamResponse.write` annotation to also allow :class:`byte | Low | 12/18/2024 |
| v3.11.10 | Bug fixes --------- - Fixed race condition in :class:`aiohttp.web.FileResponse` that could have resulted in an incorrect response if the file was replaced on the file system during ``prepare`` -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10101, #10113. - Replaced deprecated call to :func:`mimetypes.guess_type` with :func:`mimetypes.guess_file_type` when using Python 3.13+ -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10102. - Disa | Low | 12/5/2024 |
| v3.11.9 | Bug fixes --------- - Fixed invalid method logging unexpected being logged at exception level on subsequent connections -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10055, #10076. Miscellaneous internal changes ------------------------------ - Improved performance of parsing headers when using the C parser -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10073. ---- | Low | 12/1/2024 |
| v3.11.8 | Miscellaneous internal changes ------------------------------ - Improved performance of creating :class:`aiohttp.ClientResponse` objects when there are no cookies -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10029. - Improved performance of creating :class:`aiohttp.ClientResponse` objects -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10030. - Improved performances of creating objects during the HTTP request lifecycle -- by :user:` | Low | 11/27/2024 |
| v3.11.7 | Bug fixes --------- - Fixed the HTTP client not considering the connector's ``force_close`` value when setting the ``Connection`` header -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10003. Miscellaneous internal changes ------------------------------ - Improved performance of serializing HTTP headers -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #10014. ---- | Low | 11/21/2024 |
| v3.11.6 | Bug fixes --------- - Restored the ``force_close`` method to the ``ResponseHandler`` -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #9997. ---- | Low | 11/19/2024 |
| v3.11.5 | Bug fixes --------- - Fixed the ``ANY`` method not appearing in :meth:`~aiohttp.web.UrlDispatcher.routes` -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #9899, #9987. ---- | Low | 11/19/2024 |
| v3.11.4 | Bug fixes --------- - Fixed ``StaticResource`` not allowing the ``OPTIONS`` method after calling ``set_options_route`` -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #9972, #9975, #9976. Miscellaneous internal changes ------------------------------ - Improved performance of creating web responses when there are no cookies -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #9895. ---- | Low | 11/19/2024 |
| v3.11.3 | Bug fixes --------- - Removed non-existing ``__author__`` from ``dir(aiohttp)`` -- by :user:`Dreamsorcerer`. *Related issues and pull requests on GitHub:* #9918. - Restored the ``FlowControlDataQueue`` class -- by :user:`bdraco`. This class is no longer used internally, and will be permanently removed in the next major version. *Related issues and pull requests on GitHub:* #9963. Miscellaneous internal changes ------------------------------ - Improved performance of resol | Low | 11/19/2024 |
| v3.11.2 | Bug fixes --------- - Fixed improperly closed WebSocket connections generating an unhandled exception -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #9883. ---- | Low | 11/14/2024 |
| v3.11.1 | Bug fixes --------- - Added a backward compatibility layer to :class:`aiohttp.RequestInfo` to allow creating these objects without a ``real_url`` -- by :user:`bdraco`. *Related issues and pull requests on GitHub:* #9873. ---- | Low | 11/14/2024 |
| v3.11.0 | Bug fixes --------- - Raise :exc:`aiohttp.ServerFingerprintMismatch` exception on client-side if request through http proxy with mismatching server fingerprint digest: `aiohttp.ClientSession(headers=headers, connector=TCPConnector(ssl=aiohttp.Fingerprint(mismatch_digest), trust_env=True).request(...)` -- by :user:`gangj`. *Related issues and pull requests on GitHub:* #6652. - Modified websocket :meth:`aiohttp.ClientWebSocketResponse.receive_str`, :py:meth:`aiohttp.ClientWebSocketRespon | Low | 11/13/2024 |
| v3.11.0rc2 | Bug fixes --------- - Raise :exc:`aiohttp.ServerFingerprintMismatch` exception on client-side if request through http proxy with mismatching server fingerprint digest: `aiohttp.ClientSession(headers=headers, connector=TCPConnector(ssl=aiohttp.Fingerprint(mismatch_digest), trust_env=True).request(...)` -- by :user:`gangj`. *Related issues and pull requests on GitHub:* #6652. - Modified websocket :meth:`aiohttp.ClientWebSocketResponse.receive_str`, :py:meth:`aiohttp.ClientWebSocketRespon | Low | 11/13/2024 |
