CHANGES.rst
.. You should NOT be adding new change log entries to this file, this file is managed by towncrier. You may edit previous change logs to fix problems like typo corrections or such. To add a new change log entry, please see https://pip.pypa.io/en/latest/development/#adding-a-news-entry we named the news folder "changes".
WARNING: Don't drop the next directive!
.. towncrier release notes start
This release contains fixes for several vulnerabilities. It is advised to upgrade as soon as possible.
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:
:issue:2596.
Fixed multipart reading failing when encountering an empty body part -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:11857.
Fixed a case where the parser wasn't raising an exception for a websocket continuation frame when there was no initial frame in context.
Related issues and pull requests on GitHub:
:issue:11862.
Brotli and brotlicffi minimum version is now 1.2.
Decompression now has a default maximum output size of 32MiB per decompress call -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:11898.
Moved dependency metadata from :file:setup.cfg to :file:pyproject.toml per :pep:621
-- by :user:cdce8p.
Related issues and pull requests on GitHub:
:issue:11643.
Removed unused update-pre-commit github action workflow -- by :user:Cycloctane.
Related issues and pull requests on GitHub:
:issue:11689.
Optimized web server performance when access logging is disabled by reducing time syscalls -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10713.
Added regression test for cached logging status -- by :user:meehand.
Related issues and pull requests on GitHub:
:issue:11778.
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:
:issue: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 pull requests on GitHub:
:issue:11713, :issue:11714.
Fixed WebSocket compressed sends to be cancellation safe. Tasks are now shielded during compression to prevent compressor state corruption. This ensures that the stateful compressor remains consistent even when send operations are cancelled -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:11725.
Make configuration options in AppRunner also available in run_app()
-- by :user:Cycloctane.
Related issues and pull requests on GitHub:
:issue:11633.
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 this automatically).
Related issues and pull requests on GitHub:
:issue:11623.
Updated Content-Type header parsing to return application/octet-stream when header contains invalid syntax.
See :rfc:9110#section-8.3-5.
-- by :user:sgaist.
Related issues and pull requests on GitHub:
:issue:10889.
Fixed Python 3.14 support when built without zstd support -- by :user:JacobHenner.
Related issues and pull requests on GitHub:
:issue:11603.
Fixed blocking I/O in the event loop when using netrc authentication by moving netrc file lookup to an executor -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:11634.
Fixed routing to a sub-application added via .add_domain() not working
if the same path exists on the parent app. -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:11673.
Moved core packaging metadata from :file:setup.cfg to :file:pyproject.toml per :pep:621
-- by :user:cdce8p.
Related issues and pull requests on GitHub:
:issue:9951.
Added support for Python 3.14.
Related issues and pull requests on GitHub:
:issue:10851, :issue:10872.
Added support for free-threading in Python 3.14+ -- by :user:kumaraditya303.
Related issues and pull requests on GitHub:
:issue:11466, :issue:11464.
Added support for Zstandard (aka Zstd) compression
-- by :user:KGuillaume-chaps.
Related issues and pull requests on GitHub:
:issue:11161.
Added StreamReader.total_raw_bytes to check the number of bytes downloaded
-- by :user:robpats.
Related issues and pull requests on GitHub:
:issue:11483.
Fixed pytest plugin to not use deprecated :py:mod:asyncio policy APIs.
Related issues and pull requests on GitHub:
:issue:10851.
Updated Content-Disposition header parsing to handle trailing semicolons and empty parts
-- by :user:PLPeeters.
Related issues and pull requests on GitHub:
:issue:11243.
Fixed saved CookieJar failing to be loaded if cookies have partitioned flag when
http.cookie does not have partitioned cookies supports. -- by :user:Cycloctane.
Related issues and pull requests on GitHub:
:issue:11523.
Added Wireup to third-party libraries -- by :user:maldoinc.
Related issues and pull requests on GitHub:
:issue:11233.
The blockbuster test dependency is now optional; the corresponding test fixture is disabled when it is unavailable
-- by :user:musicinybrain.
Related issues and pull requests on GitHub:
:issue:11363.
Added riscv64 build to releases -- by :user:eshattow.
Related issues and pull requests on GitHub:
:issue:11425.
Fixed test_send_compress_text failing when alternative zlib implementation
is used. (zlib-ng in python 3.14 windows build) -- by :user:Cycloctane.
Related issues and pull requests on GitHub:
:issue:11546.
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:
:issue:11352.
Remove outdated contents of aiohttp-devtools and aiohttp-swagger
from Web_advanced docs.
-- by :user:Cycloctane
Related issues and pull requests on GitHub:
:issue:11347.
Started including the llhttp :file:LICENSE file in wheels by adding vendor/llhttp/LICENSE to license-files in :file:setup.cfg -- by :user:threexc.
Related issues and pull requests on GitHub:
:issue:11226.
Updated a regex in test_aiohttp_request_coroutine for Python 3.14.
Related issues and pull requests on GitHub:
:issue:11271.
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:
:issue:11270.
Fixed :py:meth:ClientSession.close() <aiohttp.ClientSession.close> hanging indefinitely when using HTTPS requests through HTTP proxies -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:11273.
Bumped minimum version of aiosignal to 1.4+ to resolve typing issues -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:11280.
Added initial trailer parsing logic to Python HTTP parser -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:11269.
Clarified exceptions raised by WebSocketResponse.send_frame et al.
-- by :user:DoctorJohn.
Related issues and pull requests on GitHub:
:issue:11234.
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:
:issue:11147.
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:
:issue: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:
:issue:11178.
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 values on
Python < 3.11 now trigger a RuntimeWarning -- by :user:bdraco.
The ssl_shutdown_timeout parameter is now deprecated and will be removed in
aiohttp 4.0 as there is no clear use case for changing the default.
Related issues and pull requests on GitHub:
:issue:11148.
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 values on
Python < 3.11 now trigger a RuntimeWarning -- by :user:bdraco.
The ssl_shutdown_timeout parameter is now deprecated and will be removed in
aiohttp 4.0 as there is no clear use case for changing the default.
Related issues and pull requests on GitHub:
:issue:11148.
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:
:issue:11150.
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.
Related issues and pull requests on GitHub:
:issue:11138.
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
preemptive=False to the middleware constructor.
Related issues and pull requests on GitHub:
:issue:11128, :issue:11129.
.. 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 :class:~aiohttp.ClientSession or :class:~aiohttp.CookieJar.
See :ref:aiohttp-client-cookie-quoting-routine for details.
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 :class:~aiohttp.CookieJar to ensure shared cookies (domain="", path="")
respect the quote_cookie parameter, making cookie quoting behavior consistent for
all cookies -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:2683, :issue:5397, :issue:7993, :issue:11112.
Fixed an issue where cookies with duplicate names but different domains or paths
were lost when updating the cookie jar. The :class:~aiohttp.ClientSession
cookie jar now correctly stores all cookies even if they have the same name but
different domain or path, following the :rfc:6265#section-5.3 storage model -- by :user:bdraco.
Note that :attr:ClientResponse.cookies <aiohttp.ClientResponse.cookies> returns
a :class:~http.cookies.SimpleCookie which uses the cookie name as a key, so
only the last cookie with each name is accessible via this interface. All cookies
can be accessed via :meth:ClientResponse.headers.getall('Set-Cookie') <multidict.MultiDictProxy.getall> if needed.
Related issues and pull requests on GitHub:
:issue:4486, :issue:11105, :issue:11106.
Avoided creating closed futures in ResponseHandler that will never be awaited -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:11107.
Downgraded the logging level for connector close errors from ERROR to DEBUG, as these are expected behavior with TLS 1.3 connections -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:11114.
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:
:issue:11100.
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 excessive delays during connector cleanup. Note: This parameter only takes effect on Python 3.11+ -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:11091, :issue:11094.
Improved performance of isinstance checks by using collections.abc types instead of typing module equivalents -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:11085, :issue:11088.
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:
:issue:1925, :issue:11074.
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:
:issue:11052, :issue:11054.
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:
:issue:11035.
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 mechanisms to resend requests without consuming the payload. Note that payloads derived from async iterables may still not be reusable in some cases.
Related issues and pull requests on GitHub:
:issue:5530, :issue:5577, :issue:9201, :issue:11017.
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:
:issue:6009, :issue:10988.
Response is now always True, instead of using MutableMapping behaviour (False when map is empty)
Related issues and pull requests on GitHub:
:issue: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:
:issue:10325, :issue:10915, :issue:10941, :issue:10943.
Fixed pytest plugin to not use deprecated :py:mod:asyncio policy APIs.
Related issues and pull requests on GitHub:
:issue:10851.
Fixed :py:class:~aiohttp.resolver.AsyncResolver not using the loop argument in versions 3.x where it should still be supported -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10951.
Added a comprehensive HTTP Digest Authentication client middleware (DigestAuthMiddleware)
that implements RFC 7616. The middleware supports all standard hash algorithms
(MD5, SHA, SHA-256, SHA-512) with session variants, handles both 'auth' and
'auth-int' quality of protection options, and automatically manages the
authentication flow by intercepting 401 responses and retrying with proper
credentials -- by :user:feus4177, :user:TimMenninger, and :user:bdraco.
Related issues and pull requests on GitHub:
:issue:2213, :issue:10725.
Added client middleware support -- by :user:bdraco and :user:Dreamsorcerer.
This change allows users to add middleware to the client session and requests, enabling features like
authentication, logging, and request/response modification without modifying the core
request logic. Additionally, the session attribute was added to ClientRequest,
allowing middleware to access the session for making additional requests.
Related issues and pull requests on GitHub:
:issue:9732, :issue:10902, :issue:10945, :issue:10952, :issue:10959, :issue:10968.
Allow user setting zlib compression backend -- by :user:TimMenninger
This change allows the user to call :func:aiohttp.set_zlib_backend() with the
zlib compression module of their choice. Default behavior continues to use
the builtin zlib library.
Related issues and pull requests on GitHub:
:issue:9798.
Added support for overriding the base URL with an absolute one in client sessions
-- by :user:vivodi.
Related issues and pull requests on GitHub:
:issue:10074.
Added host parameter to aiohttp_server fixture -- by :user:christianwbrock.
Related issues and pull requests on GitHub:
:issue:10120.
Detect blocking calls in coroutines using BlockBuster -- by :user:cbornet.
Related issues and pull requests on GitHub:
:issue:10433.
Added socket_factory to :py:class:aiohttp.TCPConnector to allow specifying custom socket options
-- by :user:TimMenninger.
Related issues and pull requests on GitHub:
:issue:10474, :issue:10520, :issue:10961, :issue:10962.
Started building armv7l manylinux wheels -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10797.
Implemented shared DNS resolver management to fix excessive resolver object creation
when using multiple client sessions. The new _DNSResolverManager singleton ensures
only one DNSResolver object is created for default configurations, significantly
reducing resource usage and improving performance for applications using multiple
client sessions simultaneously -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10847, :issue:10923, :issue:10946.
Upgraded to LLHTTP 9.3.0 -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:10972.
Optimized small HTTP requests/responses by coalescing headers and body into a single TCP packet -- by :user:bdraco.
This change enhances network efficiency by reducing the number of packets sent for small HTTP payloads, improving latency and reducing overhead. Most importantly, this fixes compatibility with memory-constrained IoT devices that can only perform a single read operation and expect HTTP requests in one packet. The optimization uses zero-copy writelines when coalescing data and works with both regular and chunked transfer encoding.
When aiohttp uses client middleware to communicate with an aiohttp server, connection reuse is more likely to occur since complete responses arrive in a single packet for small payloads.
This aligns aiohttp with other popular HTTP clients that already coalesce small requests.
Related issues and pull requests on GitHub:
:issue:10991.
Improved documentation for middleware by adding warnings and examples about
request body stream consumption. The documentation now clearly explains that
request body streams can only be read once and provides best practices for
sharing parsed request data between middleware and handlers -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:2914.
Removed non SPDX-license description from setup.cfg -- by :user:devanshu-ziphq.
Related issues and pull requests on GitHub:
:issue:10662.
Added support for building against system llhttp library -- by :user:mgorny.
This change adds support for :envvar:AIOHTTP_USE_SYSTEM_DEPS environment variable that
can be used to build aiohttp against the system install of the llhttp library rather
than the vendored one.
Related issues and pull requests on GitHub:
:issue:10759.
aiodns is now installed on Windows with speedups extra -- by :user:bdraco.
As of aiodns 3.3.0, SelectorEventLoop is no longer required when using pycares 4.7.0 or later.
Related issues and pull requests on GitHub:
:issue:10823.
Fixed compatibility issue with Cython 3.1.1 -- by :user:bdraco
Related issues and pull requests on GitHub:
:issue:10877.
Sped up tests by disabling blockbuster fixture for test_static_file_huge and test_static_file_huge_cancel tests -- by :user:dikos1337.
Related issues and pull requests on GitHub:
:issue:9705, :issue:10761.
Updated tests to avoid using deprecated :py:mod:asyncio policy APIs and
make it compatible with Python 3.14.
Related issues and pull requests on GitHub:
:issue:10851.
Added Winloop to test suite to support in the future -- by :user:Vizonex.
Related issues and pull requests on GitHub:
:issue:10922.
Added support for the partitioned attribute in the set_cookie method.
Related issues and pull requests on GitHub:
:issue:9870.
Setting :attr:aiohttp.web.StreamResponse.last_modified to an unsupported type will now raise :exc:TypeError instead of silently failing -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10146.
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:
:issue: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:
:issue:10764.
Optimized web server performance when access logging is disabled by reducing time syscalls -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10713.
Improved web server performance when connection can be reused -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10714.
Improved performance of the WebSocket reader -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10740.
Improved performance of the WebSocket reader with large messages -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10744.
Replaced deprecated asyncio.iscoroutinefunction with its counterpart from inspect
-- by :user:layday.
Related issues and pull requests on GitHub:
:issue:10634.
Fixed :class:multidict.CIMultiDict being mutated when passed to :class:aiohttp.web.Response -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10672.
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:
:issue:10464, :issue:10617, :issue:10656.
Improved performance of WebSocket buffer handling -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10601.
Improved performance of serializing headers -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10625.
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:
:issue:10529.
Fixed DNS resolution on platforms that don't support socket.AI_ADDRCONFIG -- by :user:maxbachmann.
Related issues and pull requests on GitHub:
:issue:10542.
The connector now raises :exc:aiohttp.ClientConnectionError instead of :exc:OSError when failing to explicitly close the socket after :py:meth:asyncio.loop.create_connection fails -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10551.
Break cyclic references at connection close when there was a traceback -- by :user:bdraco.
Special thanks to :user:availov for reporting the issue.
Related issues and pull requests on GitHub:
:issue:10556.
Break cyclic references when there is an exception handling a request -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10569.
Improved logging on non-overlapping WebSocket client protocols to include the remote address -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10564.
Improved performance of parsing content types by adding a cache in the same manner currently done with mime types -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10552.
Removed a break statement inside the finally block in :py:class:~aiohttp.web.RequestHandler
-- by :user:Cycloctane.
Related issues and pull requests on GitHub:
:issue: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:
:issue:10464.
Fixed test test_write_large_payload_deflate_compression_data_in_eof_writelines failing with Python 3.12.9+ or 3.13.2+ -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10423.
Added human-readable error messages to the exceptions for WebSocket disconnects due to PONG not being received -- by :user:bdraco.
Previously, the error messages were empty strings, which made it hard to determine what went wrong.
Related issues and pull requests on GitHub:
:issue:10422.
MultipartForm.decode() now follows RFC1341 7.2.1 with a CRLF after the boundary
-- by :user:imnotjames.
Related issues and pull requests on GitHub:
:issue:10270.
Restored the missing total_bytes attribute to EmptyStreamReader -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10387.
Updated :py:func:~aiohttp.request to make it accept _RequestOptions kwargs.
-- by :user:Cycloctane.
Related issues and pull requests on GitHub:
:issue:10300.
Improved logging of HTTP protocol errors to include the remote address -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10332.
Added aiohttp-openmetrics to list of third-party libraries -- by :user:jelmer.
Related issues and pull requests on GitHub:
:issue:10304.
Added missing files to the source distribution to fix Makefile targets.
Added a cythonize-nodeps target to run Cython without invoking pip to install dependencies.
Related issues and pull requests on GitHub:
:issue:10366.
Started building armv7l musllinux wheels -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10404.
The CI/CD workflow has been updated to use upload-artifact v4 and download-artifact v4 GitHub Actions -- by :user:silamon.
Related issues and pull requests on GitHub:
:issue:10281.
Restored support for zero copy writes when using Python 3.12 versions 3.12.9 and later or Python 3.13.2+ -- by :user:bdraco.
Zero copy writes were previously disabled due to :cve:2024-12254 which is resolved in these Python versions.
Related issues and pull requests on GitHub:
:issue:10137.
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:
:issue:10093.
Fixed type of SSLContext for some static type checkers (e.g. pyright).
Related issues and pull requests on GitHub:
:issue:10099.
Updated :meth:aiohttp.web.StreamResponse.write annotation to also allow :class:bytearray and :class:memoryview as inputs -- by :user:cdce8p.
Related issues and pull requests on GitHub:
:issue:10154.
Fixed a hang where a connection previously used for a streaming
download could be returned to the pool in a paused state.
-- by :user:javitonino.
Related issues and pull requests on GitHub:
:issue:10169.
Enabled ALPN on default SSL contexts. This improves compatibility with some
proxies which don't work without this extension.
-- by :user:Cycloctane.
Related issues and pull requests on GitHub:
:issue:10156.
Fixed an infinite loop that can occur when using aiohttp in combination
with async-solipsism_ -- by :user:bmerry.
.. _async-solipsism: https://github.com/bmerry/async-solipsism
Related issues and pull requests on GitHub:
:issue:10149.
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:
:issue:10101, :issue: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:
:issue:10102.
Disabled zero copy writes in the StreamWriter -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10125.
Fixed invalid method logging unexpected being logged at exception level on subsequent connections -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10055, :issue:10076.
Improved performance of parsing headers when using the C parser -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10073.
Improved performance of creating :class:aiohttp.ClientResponse objects when there are no cookies -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10029.
Improved performance of creating :class:aiohttp.ClientResponse objects -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10030.
Improved performances of creating objects during the HTTP request lifecycle -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10037.
Improved performance of constructing :class:aiohttp.web.Response with headers -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10043.
Improved performance of making requests when there are no auto headers to skip -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10049.
Downgraded logging of invalid HTTP method exceptions on the first request to debug level -- by :user:bdraco.
HTTP requests starting with an invalid method are relatively common, especially when connected to the public internet, because browsers or other clients may try to speak SSL to a plain-text server or vice-versa. These exceptions can quickly fill the log with noise when nothing is wrong.
Related issues and pull requests on GitHub:
:issue:10055.
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:
:issue:10003.
Improved performance of serializing HTTP headers -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:10014.
Restored the force_close method to the ResponseHandler -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9997.
Fixed the ANY method not appearing in :meth:~aiohttp.web.UrlDispatcher.routes -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9899, :issue:9987.
Fixed StaticResource not allowing the OPTIONS method after calling set_options_route -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9972, :issue:9975, :issue:9976.
Improved performance of creating web responses when there are no cookies -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9895.
Removed non-existing __author__ from dir(aiohttp) -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue: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:
:issue:9963.
Improved performance of resolving resources when multiple methods are registered for the same route -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9899.
Fixed improperly closed WebSocket connections generating an unhandled exception -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9883.
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:
:issue:9873.
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:
:issue:6652.
Modified websocket :meth:aiohttp.ClientWebSocketResponse.receive_str, :py:meth:aiohttp.ClientWebSocketResponse.receive_bytes, :py:meth:aiohttp.web.WebSocketResponse.receive_str & :py:meth:aiohttp.web.WebSocketResponse.receive_bytes methods to raise new :py:exc:aiohttp.WSMessageTypeError exception, instead of generic :py:exc:TypeError, when websocket messages of incorrect types are received -- by :user:ara-25.
Related issues and pull requests on GitHub:
:issue:6800.
Made TestClient.app a Generic so type checkers will know the correct type (avoiding unneeded client.app is not None checks) -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8977.
Fixed the keep-alive connection pool to be FIFO instead of LIFO -- by :user:bdraco.
Keep-alive connections are more likely to be reused before they disconnect.
Related issues and pull requests on GitHub:
:issue:9672.
Added strategy parameter to :meth:aiohttp.web.StreamResponse.enable_compression
The value of this parameter is passed to the :func:zlib.compressobj function, allowing people
to use a more sufficient compression algorithm for their data served by :mod:aiohttp.web
-- by :user:shootkin
Related issues and pull requests on GitHub:
:issue:6257.
Added server_hostname parameter to ws_connect.
Related issues and pull requests on GitHub:
:issue:7941.
Exported :py:class:~aiohttp.ClientWSTimeout to top-level namespace -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8612.
Added secure/httponly/samesite parameters to .del_cookie() -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8956.
Updated :py:class:~aiohttp.ClientSession's auth logic to include default auth only if the request URL's origin matches _base_url; otherwise, the auth will not be included -- by :user:MaximZemskov
Related issues and pull requests on GitHub:
:issue:8966, :issue:9466.
Added proxy and proxy_auth parameters to :py:class:~aiohttp.ClientSession -- by :user:meshya.
Related issues and pull requests on GitHub:
:issue:9207.
Added default_to_multipart parameter to FormData.
Related issues and pull requests on GitHub:
:issue:9335.
Added :py:meth:~aiohttp.ClientWebSocketResponse.send_frame and :py:meth:~aiohttp.web.WebSocketResponse.send_frame for WebSockets -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9348.
Updated :py:class:~aiohttp.ClientSession to support paths in base_url parameter.
base_url paths must end with a / -- by :user:Cycloctane.
Related issues and pull requests on GitHub:
:issue:9530.
Improved performance of reading WebSocket messages with a Cython implementation -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9543, :issue:9554, :issue:9556, :issue:9558, :issue:9636, :issue:9649, :issue:9781.
Added writer_limit to the :py:class:~aiohttp.web.WebSocketResponse to be able to adjust the limit before the writer forces the buffer to be drained -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9572.
Added an :attr:~aiohttp.abc.AbstractAccessLogger.enabled property to :class:aiohttp.abc.AbstractAccessLogger to dynamically check if logging is enabled -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9822.
Deprecate obsolete timeout: float and receive_timeout: Optional[float] in :py:meth:~aiohttp.ClientSession.ws_connect. Change default websocket receive timeout from None to 10.0.
Related issues and pull requests on GitHub:
:issue:3945.
Dropped support for Python 3.8 -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8797.
Increased minimum yarl version to 1.17.0 -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8909, :issue:9079, :issue:9305, :issue:9574.
Removed the is_ipv6_address and is_ip4_address helpers are they are no longer used -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9344.
Changed ClientRequest.connection_key to be a NamedTuple to improve client performance -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9365.
FlowControlDataQueue has been replaced with the WebSocketDataQueue -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9685.
Changed ClientRequest.request_info to be a NamedTuple to improve client performance -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9692.
Switched to using the :mod:propcache <propcache.api> package for property caching
-- by :user:bdraco.
The :mod:propcache <propcache.api> package is derived from the property caching
code in :mod:yarl and has been broken out to avoid maintaining it for multiple
projects.
Related issues and pull requests on GitHub:
:issue:9394.
Separated aiohttp.http_websocket into multiple files to make it easier to maintain -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9542, :issue:9552.
Changed diagram images generator from blockdiag to GraphViz.
Generating documentation now requires the GraphViz executable to be included in $PATH or sphinx build configuration.
Related issues and pull requests on GitHub:
:issue:9359.
Added flake8 settings to avoid some forms of implicit concatenation. -- by :user:booniepepper.
Related issues and pull requests on GitHub:
:issue:7731.
Enabled keep-alive support on proxies (which was originally disabled several years ago) -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8920.
Changed web entry point to not listen on TCP when only a Unix path is passed -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:9033.
Disabled automatic retries of failed requests in :class:aiohttp.test_utils.TestClient's client session
(which could potentially hide errors in tests) -- by :user:ShubhAgarwal-dev.
Related issues and pull requests on GitHub:
:issue:9141.
Changed web keepalive_timeout default to around an hour in order to reduce race conditions on reverse proxies -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:9285.
Reduced memory required for stream objects created during the client request lifecycle -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9407.
Improved performance of the internal DataQueue -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9659.
Improved performance of calling receive for WebSockets for the most common message types -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9679.
Replace internal helper methods method_must_be_empty_body and status_code_must_be_empty_body with simple set lookups -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9722.
Improved performance of :py:class:aiohttp.BaseConnector when there is no limit_per_host -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9756.
Improved performance of sending HTTP requests when there is no body -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9757.
Improved performance of the WebsocketWriter when the protocol is not paused -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9796.
Implemented zero copy writes for StreamWriter -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9839.
Authentication provided by a redirect now takes precedence over provided auth when making requests with the client -- by :user:PLPeeters.
Related issues and pull requests on GitHub:
:issue:9436.
Fixed :py:meth:WebSocketResponse.close() <aiohttp.web.WebSocketResponse.close> to discard non-close messages within its timeout window after sending close -- by :user:lenard-mosys.
Related issues and pull requests on GitHub:
:issue:9506.
Fixed a deadlock that could occur while attempting to get a new connection slot after a timeout -- by :user:bdraco.
The connector was not cancellation-safe.
Related issues and pull requests on GitHub:
:issue:9670, :issue:9671.
Fixed the WebSocket flow control calculation undercounting with multi-byte data -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9686.
Fixed incorrect parsing of chunk extensions with the pure Python parser -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9851.
Fixed system routes polluting the middleware cache -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9852.
Improved performance of the connector when a connection can be reused -- by :user:bdraco.
If BaseConnector.connect has been subclassed and replaced with custom logic, the ceil_timeout must be added.
Related issues and pull requests on GitHub:
:issue:9600.
Improved performance of the client request lifecycle when there are no cookies -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9470.
Improved performance of sending client requests when the writer can finish synchronously -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9485.
Improved performance of serializing HTTP headers -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9603.
Passing enable_cleanup_closed to :py:class:aiohttp.TCPConnector is now ignored on Python 3.12.7+ and 3.13.1+ since the underlying bug that caused asyncio to leak SSL connections has been fixed upstream -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9726, :issue:9736.
Fixed error messages from :py:class:~aiohttp.resolver.AsyncResolver being swallowed -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9451, :issue:9455.
Added :exc:aiohttp.ClientConnectorDNSError for differentiating DNS resolution errors from other connector errors -- by :user:mstojcevich.
Related issues and pull requests on GitHub:
:issue:8455.
Simplified DNS resolution throttling code to reduce chance of race conditions -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9454.
Fixed proxy headers being used in the ConnectionKey hash when a proxy was not being used -- by :user:bdraco.
If default headers are used, they are also used for proxy headers. This could have led to creating connections that were not needed when one was already available.
Related issues and pull requests on GitHub:
:issue:9368.
Widened the type of the trace_request_ctx parameter of
:meth:ClientSession.request() <aiohttp.ClientSession.request> and friends
-- by :user:layday.
Related issues and pull requests on GitHub:
:issue:9397.
Fixed failure to try next host after single-host connection timeout -- by :user:brettdh.
The default client :class:aiohttp.ClientTimeout params has changed to include a sock_connect timeout of 30 seconds so that this correct behavior happens by default.
Related issues and pull requests on GitHub:
:issue:7342.
Improved performance of resolving hosts with Python 3.12+ -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9342.
Reduced memory required for timer objects created during the client request lifecycle -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9406.
Fixed cancellation leaking upwards on timeout -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9326.
Fixed assembling the :class:~yarl.URL for web requests when the host contains a non-default port or IPv6 address -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9309.
Improved performance of determining if a URL is absolute -- by :user:bdraco.
The property :attr:~yarl.URL.absolute is more performant than the method URL.is_absolute() and preferred when newer versions of yarl are used.
Related issues and pull requests on GitHub:
:issue:9171.
Replaced code that can now be handled by yarl -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9301.
Added :exc:aiohttp.ClientConnectionResetError. Client code that previously threw :exc:ConnectionResetError
will now throw this -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:9137.
Fixed an unclosed transport ResourceWarning on web handlers -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8875.
Fixed resolve_host() 'Task was destroyed but is pending' errors -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8967.
Fixed handling of some file-like objects (e.g. tarfile.extractfile()) which raise AttributeError instead of OSError when fileno fails for streaming payload data -- by :user:ReallyReivax.
Related issues and pull requests on GitHub:
:issue:6732.
Fixed web router not matching pre-encoded URLs (requires yarl 1.9.6+) -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8898, :issue:9267.
Fixed an error when trying to add a route for multiple methods with a path containing a regex pattern -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8998.
Fixed Response.text when body is a Payload -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:6485.
Fixed compressed requests failing when no body was provided -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:9108.
Fixed client incorrectly reusing a connection when the previous message had not been fully sent -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8992.
Fixed race condition that could cause server to close connection incorrectly at keepalive timeout -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:9140.
Fixed Python parser chunked handling with multiple Transfer-Encoding values -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8823.
Fixed error handling after 100-continue so server sends 500 response instead of disconnecting -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8876.
Stopped adding a default Content-Type header when response has no content -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8858.
Added support for URL credentials with empty (zero-length) username, e.g. https://:password@host -- by :user:shuckc
Related issues and pull requests on GitHub:
:issue:6494.
Stopped logging exceptions from web.run_app() that would be raised regardless -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:6807.
Implemented binding to IPv6 addresses in the pytest server fixture.
Related issues and pull requests on GitHub:
:issue:4650.
Fixed the incorrect use of flags for getnameinfo() in the Resolver --by :user:GitNMLee
Link-Local IPv6 addresses can now be handled by the Resolver correctly.
Related issues and pull requests on GitHub:
:issue:9032.
Fixed StreamResponse.prepared to return True after EOF is sent -- by :user:arthurdarcet.
Related issues and pull requests on GitHub:
:issue:5343.
Changed make_mocked_request() to use empty payload by default -- by :user:rahulnht.
Related issues and pull requests on GitHub:
:issue:7167.
Used more precise type for ClientResponseError.headers, fixing some type errors when using them -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8768.
Changed behavior when returning an invalid response to send a 500 response -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8845.
Fixed response reading from closed session to throw an error immediately instead of timing out -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8878.
Fixed CancelledError from one cleanup context stopping other contexts from completing -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8908.
Fixed changing scheme/host in Response.clone() for absolute URLs -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8990.
Fixed Site.name when host is an empty string -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8929.
Updated Python parser to reject messages after a close message, matching C parser behaviour -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:9018.
Fixed creation of SSLContext inside of :py:class:aiohttp.TCPConnector with multiple event loops in different threads -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9029.
Fixed (on Python 3.11+) some edge cases where a task cancellation may get incorrectly suppressed -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:9030.
Fixed exception information getting lost on HttpProcessingError -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:9052.
Fixed If-None-Match not using weak comparison -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:9063.
Fixed badly encoded charset crashing when getting response text instead of falling back to charset detector.
Related issues and pull requests on GitHub:
:issue:9160.
Rejected \n in reason values to avoid sending broken HTTP messages -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:9167.
Changed :py:meth:ClientResponse.raise_for_status() <aiohttp.ClientResponse.raise_for_status> to only release the connection when invoked outside an async with context -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:9239.
Improved type on params to match the underlying type allowed by yarl -- by :user:lpetre.
Related issues and pull requests on GitHub:
:issue:8564.
Declared Python 3.13 supported -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8748.
Improved middleware performance -- by :user:bdraco.
The set_current_app method was removed from UrlMappingMatchInfo because it is no longer used, and it was unlikely external caller would ever use it.
Related issues and pull requests on GitHub:
:issue:9200.
Increased minimum yarl version to 1.12.0 -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9267.
Clarified that GracefulExit needs to be handled in AppRunner and ServerRunner when using handle_signals=True. -- by :user:Daste745
Related issues and pull requests on GitHub:
:issue:4414.
Clarified that auth parameter in ClientSession will persist and be included with any request to any origin, even during redirects to different origins. -- by :user:MaximZemskov.
Related issues and pull requests on GitHub:
:issue:6764.
Clarified which timeout exceptions happen on which timeouts -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8968.
Updated ClientSession parameters to match current code -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8991.
Fixed test_client_session_timeout_zero to not require internet access -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:9004.
Improved performance of making requests when there are no auto headers to skip -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8847.
Exported aiohttp.TraceRequestHeadersSentParams -- by :user:Hadock-is-ok.
Related issues and pull requests on GitHub:
:issue:8947.
Avoided tracing overhead in the http writer when there are no active traces -- by user:bdraco.
Related issues and pull requests on GitHub:
:issue:9031.
Improved performance of reify Cython implementation -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9054.
Use :meth:URL.extend_query() <yarl.URL.extend_query> to extend query params (requires yarl 1.11.0+) -- by :user:bdraco.
If yarl is older than 1.11.0, the previous slower hand rolled version will be used.
Related issues and pull requests on GitHub:
:issue:9068.
Improved performance of checking if a host is an IP Address -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9095.
Significantly improved performance of middlewares -- by :user:bdraco.
The construction of the middleware wrappers is now cached and is built once per handler instead of on every request.
Related issues and pull requests on GitHub:
:issue:9158, :issue:9170.
Improved performance of web requests -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9168, :issue:9169, :issue:9172, :issue:9174, :issue:9175, :issue:9241.
Improved performance of starting web requests when there is no response prepare hook -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9173.
Significantly improved performance of expiring cookies -- by :user:bdraco.
Expiring cookies has been redesigned to use :mod:heapq instead of a linear search, to better scale.
Related issues and pull requests on GitHub:
:issue:9203.
Significantly sped up filtering cookies -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:9204.
Fixed :meth:aiohttp.ClientResponse.json() not setting status when :exc:aiohttp.ContentTypeError is raised -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8742.
Improved performance of the WebSocket reader -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8736, :issue:8747.
Fixed decoding base64 chunk in BodyPartReader -- by :user:hyzyla.
Related issues and pull requests on GitHub:
:issue:3867.
Fixed a race closing the server-side WebSocket where the close code would not reach the client -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8680.
Fixed unconsumed exceptions raised by the WebSocket heartbeat -- by :user:bdraco.
If the heartbeat ping raised an exception, it would not be consumed and would be logged as an warning.
Related issues and pull requests on GitHub:
:issue:8685.
Fixed an edge case in the Python parser when chunk separators happen to align with network chunks -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8720.
Added aiohttp-apischema to supported libraries -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8700.
Improved performance of starting request handlers with Python 3.12+ -- by :user:bdraco.
This change is a followup to :issue:8661 to make the same optimization for Python 3.12+ where the request is connected.
Related issues and pull requests on GitHub:
:issue:8681.
Fixed multipart reading when stream buffer splits the boundary over several read() calls -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8653.
Fixed :py:class:aiohttp.TCPConnector doing blocking I/O in the event loop to create the SSLContext -- by :user:bdraco.
The blocking I/O would only happen once per verify mode. However, it could cause the event loop to block for a long time if the SSLContext creation is slow, which is more likely during startup when the disk cache is not yet present.
Related issues and pull requests on GitHub:
:issue:8672.
Improved performance of :py:meth:~aiohttp.ClientWebSocketResponse.receive and :py:meth:~aiohttp.web.WebSocketResponse.receive when there is no timeout. -- by :user:bdraco.
The timeout context manager is now avoided when there is no timeout as it accounted for up to 50% of the time spent in the :py:meth:~aiohttp.ClientWebSocketResponse.receive and :py:meth:~aiohttp.web.WebSocketResponse.receive methods.
Related issues and pull requests on GitHub:
:issue:8660.
Improved performance of starting request handlers with Python 3.12+ -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8661.
Improved performance of HTTP keep-alive checks -- by :user:bdraco.
Previously, when processing a request for a keep-alive connection, the keep-alive check would happen every second; the check is now rescheduled if it fires too early instead.
Related issues and pull requests on GitHub:
:issue:8662.
Improved performance of generating random WebSocket mask -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8667.
Fixed server checks for circular symbolic links to be compatible with Python 3.13 -- by :user:steverep.
Related issues and pull requests on GitHub:
:issue:8565.
Fixed request body not being read when ignoring an Upgrade request -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8597.
Fixed an edge case where shutdown would wait for timeout when the handler was already completed -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8611.
Fixed connecting to npipe://, tcp://, and unix:// urls -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8632.
Fixed WebSocket ping tasks being prematurely garbage collected -- by :user:bdraco.
There was a small risk that WebSocket ping tasks would be prematurely garbage collected because the event loop only holds a weak reference to the task. The garbage collection risk has been fixed by holding a strong reference to the task. Additionally, the task is now scheduled eagerly with Python 3.12+ to increase the chance it can be completed immediately and avoid having to hold any references to the task.
Related issues and pull requests on GitHub:
:issue:8641.
Fixed incorrectly following symlinks for compressed file variants -- by :user:steverep.
Related issues and pull requests on GitHub:
:issue:8652.
Removed Request.wait_for_disconnection(), which was mistakenly added briefly in 3.10.0 -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8636.
Fixed monkey patches for Path.stat() and Path.is_dir() for Python 3.13 compatibility -- by :user:steverep.
Related issues and pull requests on GitHub:
:issue:8551.
Improved WebSocket performance when messages are sent or received frequently -- by :user:bdraco.
The WebSocket heartbeat scheduling algorithm was improved to reduce the asyncio scheduling overhead by decreasing the number of asyncio.TimerHandle creations and cancellations.
Related issues and pull requests on GitHub:
:issue:8608.
Minor improvements to various type annotations -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8634.
Fixed WebSocket server heartbeat timeout logic to terminate :py:meth:~aiohttp.ClientWebSocketResponse.receive and return :py:class:~aiohttp.ServerTimeoutError -- by :user:arcivanov.
When a WebSocket pong message was not received, the :py:meth:~aiohttp.ClientWebSocketResponse.receive operation did not terminate. This change causes _pong_not_received to feed the reader an error message, causing pending :py:meth:~aiohttp.ClientWebSocketResponse.receive to terminate and return the error message. The error message contains the exception :py:class:~aiohttp.ServerTimeoutError.
Related issues and pull requests on GitHub:
:issue:8540.
Fixed url dispatcher index not matching when a variable is preceded by a fixed string after a slash -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8566.
Creating :py:class:aiohttp.TCPConnector, :py:class:aiohttp.ClientSession, :py:class:~aiohttp.resolver.ThreadedResolver :py:class:aiohttp.web.Server, or :py:class:aiohttp.CookieJar instances without a running event loop now raises a :exc:RuntimeError -- by :user:asvetlov.
Creating these objects without a running event loop was deprecated in :issue:3372 which was released in version 3.5.0.
This change first appeared in version 3.10.0 as :issue:6378.
Related issues and pull requests on GitHub:
:issue:8555, :issue:8583.
Fixed server response headers for Content-Type and Content-Encoding for
static compressed files -- by :user:steverep.
Server will now respond with a Content-Type appropriate for the compressed
file (e.g. "application/gzip"), and omit the Content-Encoding header.
Users should expect that most clients will no longer decompress such responses
by default.
Related issues and pull requests on GitHub:
:issue:4462.
Fixed duplicate cookie expiration calls in the CookieJar implementation
Related issues and pull requests on GitHub:
:issue:7784.
Adjusted FileResponse to check file existence and access when preparing the response -- by :user:steverep.
The :py:class:~aiohttp.web.FileResponse class was modified to respond with
403 Forbidden or 404 Not Found as appropriate. Previously, it would cause a
server error if the path did not exist or could not be accessed. Checks for
existence, non-regular files, and permissions were expected to be done in the
route handler. For static routes, this now permits a compressed file to exist
without its uncompressed variant and still be served. In addition, this
changes the response status for files without read permission to 403, and for
non-regular files from 404 to 403 for consistency.
Related issues and pull requests on GitHub:
:issue:8182.
Fixed AsyncResolver to match ThreadedResolver behavior
-- by :user:bdraco.
On system with IPv6 support, the :py:class:~aiohttp.resolver.AsyncResolver would not fallback
to providing A records when AAAA records were not available.
Additionally, unlike the :py:class:~aiohttp.resolver.ThreadedResolver, the :py:class:~aiohttp.resolver.AsyncResolver
did not handle link-local addresses correctly.
This change makes the behavior consistent with the :py:class:~aiohttp.resolver.ThreadedResolver.
Related issues and pull requests on GitHub:
:issue:8270.
Fixed ws_connect not respecting receive_timeout`` on WS(S) connection. -- by :user:arcivanov`.
Related issues and pull requests on GitHub:
:issue:8444.
Removed blocking I/O in the event loop for static resources and refactored
exception handling -- by :user:steverep.
File system calls when handling requests for static routes were moved to a separate thread to potentially improve performance. Exception handling was tightened in order to only return 403 Forbidden or 404 Not Found responses for expected scenarios; 500 Internal Server Error would be returned for any unknown errors.
Related issues and pull requests on GitHub:
:issue:8507.
Added a Request.wait_for_disconnection() method, as means of allowing request handlers to be notified of premature client disconnections.
Related issues and pull requests on GitHub:
:issue:2492.
Added 5 new exceptions: :py:exc:~aiohttp.InvalidUrlClientError, :py:exc:~aiohttp.RedirectClientError,
:py:exc:~aiohttp.NonHttpUrlClientError, :py:exc:~aiohttp.InvalidUrlRedirectClientError,
:py:exc:~aiohttp.NonHttpUrlRedirectClientError
:py:exc:~aiohttp.InvalidUrlRedirectClientError, :py:exc:~aiohttp.NonHttpUrlRedirectClientError
are raised instead of :py:exc:ValueError or :py:exc:~aiohttp.InvalidURL when the redirect URL is invalid. Classes
:py:exc:~aiohttp.InvalidUrlClientError, :py:exc:~aiohttp.RedirectClientError,
:py:exc:~aiohttp.NonHttpUrlClientError are base for them.
The :py:exc:~aiohttp.InvalidURL now exposes a description property with the text explanation of the error details.
-- by :user:setla, :user:AraHaan, and :user:bdraco
Related issues and pull requests on GitHub:
:issue:2507, :issue:3315, :issue:6722, :issue:8481, :issue:8482.
Added a feature to retry closed connections automatically for idempotent methods. -- by :user:Dreamsorcerer
Related issues and pull requests on GitHub:
:issue:7297.
Implemented filter_cookies() with domain-matching and path-matching on the keys, instead of testing every single cookie.
This may break existing cookies that have been saved with CookieJar.save(). Cookies can be migrated with this script::
import pickle
with file_path.open("rb") as f:
cookies = pickle.load(f)
morsels = [(name, m) for c in cookies.values() for name, m in c.items()]
cookies.clear()
for name, m in morsels:
cookies[(m["domain"], m["path"].rstrip("/"))][name] = m
with file_path.open("wb") as f:
pickle.dump(cookies, f, pickle.HIGHEST_PROTOCOL)
Related issues and pull requests on GitHub:
:issue:7583, :issue:8535.
Separated connection and socket timeout errors, from ServerTimeoutError.
Related issues and pull requests on GitHub:
:issue:7801.
Implemented happy eyeballs
Related issues and pull requests on GitHub:
:issue:7954.
Added server capability to check for static files with Brotli compression via a .br extension -- by :user:steverep.
Related issues and pull requests on GitHub:
:issue:8062.
The shutdown logic in 3.9 waited on all tasks, which caused issues with some libraries.
In 3.10 we've changed this logic to only wait on request handlers. This means that it's
important for developers to correctly handle the lifecycle of background tasks using a
library such as aiojobs. If an application is using handler_cancellation=True then
it is also a good idea to ensure that any :func:asyncio.shield calls are replaced with
:func:aiojobs.aiohttp.shield.
Please read the updated documentation on these points:
https://docs.aiohttp.org/en/stable/web_advanced.html#graceful-shutdown
https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation
-- by :user:Dreamsorcerer
Related issues and pull requests on GitHub:
:issue:8495.
Added documentation for aiohttp.web.FileResponse.
Related issues and pull requests on GitHub:
:issue:3958.
Improved the docs for the ssl params.
Related issues and pull requests on GitHub:
:issue:8403.
Enabled HTTP parser tests originally intended for 3.9.2 release -- by :user:pajod.
Related issues and pull requests on GitHub:
:issue:8088.
Improved URL handler resolution time by indexing resources in the UrlDispatcher.
For applications with a large number of handlers, this should increase performance significantly.
-- by :user:bdraco
Related issues and pull requests on GitHub:
:issue:7829.
Added nacl_middleware <https://github.com/CosmicDNA/nacl_middleware>_ to the list of middlewares in the third party section of the documentation.
Related issues and pull requests on GitHub:
:issue:8346.
Minor improvements to static typing -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8364.
Added a 3.11-specific overloads to ClientSession -- by :user:max-muoto.
Related issues and pull requests on GitHub:
:issue:8463.
Simplified path checks for UrlDispatcher.add_static() method -- by :user:steverep.
Related issues and pull requests on GitHub:
:issue:8491.
Avoided creating a future on every websocket receive -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8498.
Updated identity checks for all WSMsgType type compares -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8501.
When using Python 3.12 or later, the writer is no longer scheduled on the event loop if it can finish synchronously. Avoiding event loop scheduling reduces latency and improves performance. -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8510.
Restored :py:class:~aiohttp.resolver.AsyncResolver to be the default resolver. -- by :user:bdraco.
:py:class:~aiohttp.resolver.AsyncResolver was disabled by default because
of IPv6 compatibility issues. These issues have been resolved and
:py:class:~aiohttp.resolver.AsyncResolver is again now the default resolver.
Related issues and pull requests on GitHub:
:issue:8522.
Fixed "Unclosed client session" when initialization of
:py:class:~aiohttp.ClientSession fails -- by :user:NewGlad.
Related issues and pull requests on GitHub:
:issue:8253.
Fixed regression (from :pr:8280) with adding Content-Disposition to the form-data
part after appending to writer -- by :user:Dreamsorcerer/:user:Olegt0rr.
Related issues and pull requests on GitHub:
:issue:8332.
Added default Content-Disposition in multipart/form-data responses to avoid broken
form-data responses -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8335.
The asynchronous internals now set the underlying causes
when assigning exceptions to the future objects
-- by :user:webknjaz.
Related issues and pull requests on GitHub:
:issue:8089.
Treated values of Accept-Encoding header as case-insensitive when checking
for gzip files -- by :user:steverep.
Related issues and pull requests on GitHub:
:issue:8104.
Improved the DNS resolution performance on cache hit -- by :user:bdraco.
This is achieved by avoiding an :mod:asyncio task creation in this case.
Related issues and pull requests on GitHub:
:issue:8163.
Changed the type annotations to allow dict on :meth:aiohttp.MultipartWriter.append,
:meth:aiohttp.MultipartWriter.append_json and
:meth:aiohttp.MultipartWriter.append_form -- by :user:cakemanny
Related issues and pull requests on GitHub:
:issue:7741.
Ensure websocket transport is closed when client does not close it
-- by :user:bdraco.
The transport could remain open if the client did not close it. This change ensures the transport is closed when the client does not close it.
Related issues and pull requests on GitHub:
:issue:8200.
Leave websocket transport open if receive times out or is cancelled
-- by :user:bdraco.
This restores the behavior prior to the change in #7978.
Related issues and pull requests on GitHub:
:issue:8251.
Fixed content not being read when an upgrade request was not supported with the pure Python implementation.
-- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8252.
Fixed a race condition with incoming connections during server shutdown -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8271.
Fixed multipart/form-data compliance with :rfc:7578 -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8280.
Fixed blocking I/O in the event loop while processing files in a POST request
-- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8283.
Escaped filenames in static view -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8317.
Fixed the pure python parser to mark a connection as closing when a
response has no length -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8320.
Upgraded llhttp to 9.2.1, and started rejecting obsolete line folding
in Python parser to match -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8146, :issue:8292.
Deprecated content_transfer_encoding parameter in :py:meth:FormData.add_field() <aiohttp.FormData.add_field> -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8280.
Added a note about canceling tasks to avoid delaying server shutdown -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8267.
The pull request template is now asking the contributors to
answer a question about the long-term maintenance challenges
they envision as a result of merging their patches
-- by :user:webknjaz.
Related issues and pull requests on GitHub:
:issue:8099.
Updated CI and documentation to use NPM clean install and upgrade
node to version 18 -- by :user:steverep.
Related issues and pull requests on GitHub:
:issue:8116.
A pytest fixture hello_txt was introduced to aid
static file serving tests in
:file:test_web_sendfile_functional.py. It dynamically
provisions hello.txt file variants shared across the
tests in the module.
-- by :user:steverep
Related issues and pull requests on GitHub:
:issue:8136.
Added an internal pytest marker for tests which should be skipped
by packagers (use -m 'not internal' to disable them) -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8299.
Fixed backwards compatibility breakage (in 3.9.2) of ssl parameter when set outside
of ClientSession (e.g. directly in TCPConnector) -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:8097, :issue:8098.
Improved test suite handling of paths and temp files to consistently use pathlib and pytest fixtures.
Related issues and pull requests on GitHub:
:issue:3957.
Fixed server-side websocket connection leak.
Related issues and pull requests on GitHub:
:issue:7978.
Fixed web.FileResponse doing blocking I/O in the event loop.
Related issues and pull requests on GitHub:
:issue:8012.
Fixed double compress when compression enabled and compressed file exists in server file responses.
Related issues and pull requests on GitHub:
:issue:8014.
Added runtime type check for ClientSession timeout parameter.
Related issues and pull requests on GitHub:
:issue:8021.
Fixed an unhandled exception in the Python HTTP parser on header lines starting with a colon -- by :user:pajod.
Invalid request lines with anything but a dot between the HTTP major and minor version are now rejected.
Invalid header field names containing question mark or slash are now rejected.
Such requests are incompatible with :rfc:9110#section-5.6.2 and are not known to be of any legitimate use.
Related issues and pull requests on GitHub:
:issue:8074.
Improved validation of paths for static resources requests to the server -- by :user:bdraco.
Related issues and pull requests on GitHub:
:issue:8079.
Added support for passing :py:data:True to ssl parameter in ClientSession while
deprecating :py:data:None -- by :user:xiangyan99.
Related issues and pull requests on GitHub:
:issue:7698.
Fixed an unhandled exception in the Python HTTP parser on header lines starting with a colon -- by :user:pajod.
Invalid request lines with anything but a dot between the HTTP major and minor version are now rejected.
Invalid header field names containing question mark or slash are now rejected.
Such requests are incompatible with :rfc:9110#section-5.6.2 and are not known to be of any legitimate use.
Related issues and pull requests on GitHub:
:issue:8074.
Fixed examples of fallback_charset_resolver function in the :doc:client_advanced document. -- by :user:henry0312.
Related issues and pull requests on GitHub:
:issue:7995.
The Sphinx setup was updated to avoid showing the empty
changelog draft section in the tagged release documentation
builds on Read The Docs -- by :user:webknjaz.
Related issues and pull requests on GitHub:
:issue:8067.
The changelog categorization was made clearer. The
contributors can now mark their fragment files more
accurately -- by :user:webknjaz.
The new category tags are:
* ``bugfix``
* ``feature``
* ``deprecation``
* ``breaking`` (previously, ``removal``)
* ``doc``
* ``packaging``
* ``contrib``
* ``misc``
Related issues and pull requests on GitHub:
:issue:8066.
Updated :ref:contributing/Tests coverage <aiohttp-contributing> section to show how we use codecov -- by :user:Dreamsorcerer.
Related issues and pull requests on GitHub:
:issue:7916.
The changelog categorization was made clearer. The
contributors can now mark their fragment files more
accurately -- by :user:webknjaz.
The new category tags are:
* ``bugfix``
* ``feature``
* ``deprecation``
* ``breaking`` (previously, ``removal``)
* ``doc``
* ``packaging``
* ``contrib``
* ``misc``
Related issues and pull requests on GitHub:
:issue:8066.
Replaced all tmpdir fixtures with tmp_path in test suite.
Related issues and pull requests on GitHub:
:issue:3551.
Fixed importing aiohttp under PyPy on Windows.
#7848 <https://github.com/aio-libs/aiohttp/issues/7848>_
Fixed async concurrency safety in websocket compressor.
#7865 <https://github.com/aio-libs/aiohttp/issues/7865>_
Fixed ClientResponse.close() releasing the connection instead of closing.
#7869 <https://github.com/aio-libs/aiohttp/issues/7869>_
Fixed a regression where connection may get closed during upgrade. -- by :user:Dreamsorcerer
#7879 <https://github.com/aio-libs/aiohttp/issues/7879>_
Fixed messages being reported as upgraded without an Upgrade header in Python parser. -- by :user:Dreamsorcerer
#7895 <https://github.com/aio-libs/aiohttp/issues/7895>_
Introduced AppKey for static typing support of Application storage.
See https://docs.aiohttp.org/en/stable/web_advanced.html#application-s-config
#5864 <https://github.com/aio-libs/aiohttp/issues/5864>_
Added a graceful shutdown period which allows pending tasks to complete before the application's cleanup is called.
The period can be adjusted with the shutdown_timeout parameter. -- by :user:Dreamsorcerer.
See https://docs.aiohttp.org/en/latest/web_advanced.html#graceful-shutdown
#7188 <https://github.com/aio-libs/aiohttp/issues/7188>_
Added handler_cancellation <https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation>_ parameter to cancel web handler on client disconnection. -- by :user:mosquito
This (optionally) reintroduces a feature removed in a previous release.
Recommended for those looking for an extra level of protection against denial-of-service attacks.
#7056 <https://github.com/aio-libs/aiohttp/issues/7056>_
Added support for setting response header parameters max_line_size and max_field_size.
#2304 <https://github.com/aio-libs/aiohttp/issues/2304>_
Added auto_decompress parameter to ClientSession.request to override ClientSession._auto_decompress. -- by :user:Daste745
#3751 <https://github.com/aio-libs/aiohttp/issues/3751>_
Changed raise_for_status to allow a coroutine.
#3892 <https://github.com/aio-libs/aiohttp/issues/3892>_
Added client brotli compression support (optional with runtime check).
#5219 <https://github.com/aio-libs/aiohttp/issues/5219>_
Added client_max_size to BaseRequest.clone() to allow overriding the request body size. -- :user:anesabml.
#5704 <https://github.com/aio-libs/aiohttp/issues/5704>_
Added a middleware type alias aiohttp.typedefs.Middleware.
#5898 <https://github.com/aio-libs/aiohttp/issues/5898>_
Exported HTTPMove which can be used to catch any redirection request
that has a location -- :user:dreamsorcerer.
#6594 <https://github.com/aio-libs/aiohttp/issues/6594>_
Changed the path parameter in web.run_app() to accept a pathlib.Path object.
#6839 <https://github.com/aio-libs/aiohttp/issues/6839>_
Performance: Skipped filtering CookieJar when the jar is empty or all cookies have expired.
#7819 <https://github.com/aio-libs/aiohttp/issues/7819>_
Performance: Only check origin if insecure scheme and there are origins to treat as secure, in CookieJar.filter_cookies().
#7821 <https://github.com/aio-libs/aiohttp/issues/7821>_
Performance: Used timestamp instead of datetime to achieve faster cookie expiration in CookieJar.
#7824 <https://github.com/aio-libs/aiohttp/issues/7824>_
Added support for passing a custom server name parameter to HTTPS connection.
#7114 <https://github.com/aio-libs/aiohttp/issues/7114>_
Added support for using Basic Auth credentials from :file:.netrc file when making HTTP requests with the
:py:class:~aiohttp.ClientSession trust_env argument is set to True. -- by :user:yuvipanda.
#7131 <https://github.com/aio-libs/aiohttp/issues/7131>_
Turned access log into no-op when the logger is disabled.
#7240 <https://github.com/aio-libs/aiohttp/issues/7240>_
Added typing information to RawResponseMessage. -- by :user:Gobot1234
#7365 <https://github.com/aio-libs/aiohttp/issues/7365>_
Removed async-timeout for Python 3.11+ (replaced with asyncio.timeout() on newer releases).
#7502 <https://github.com/aio-libs/aiohttp/issues/7502>_
Added support for brotlicffi as an alternative to brotli (fixing Brotli support on PyPy).
#7611 <https://github.com/aio-libs/aiohttp/issues/7611>_
Added WebSocketResponse.get_extra_info() to access a protocol transport's extra info.
#7078 <https://github.com/aio-libs/aiohttp/issues/7078>_
Allow link argument to be set to None/empty in HTTP 451 exception.
#7689 <https://github.com/aio-libs/aiohttp/issues/7689>_
Implemented stripping the trailing dots from fully-qualified domain names in Host headers and TLS context when acting as an HTTP client.
This allows the client to connect to URLs with FQDN host name like https://example.com./.
-- by :user:martin-sucha.
#3636 <https://github.com/aio-libs/aiohttp/issues/3636>_
Fixed client timeout not working when incoming data is always available without waiting. -- by :user:Dreamsorcerer.
#5854 <https://github.com/aio-libs/aiohttp/issues/5854>_
Fixed readuntil to work with a delimiter of more than one character.
#6701 <https://github.com/aio-libs/aiohttp/issues/6701>_
Added __repr__ to EmptyStreamReader to avoid AttributeError.
#6916 <https://github.com/aio-libs/aiohttp/issues/6916>_
Fixed bug when using TCPConnector with ttl_dns_cache=0.
#7014 <https://github.com/aio-libs/aiohttp/issues/7014>_
Fixed response returned from expect handler being thrown away. -- by :user:Dreamsorcerer
#7025 <https://github.com/aio-libs/aiohttp/issues/7025>_
Avoided raising UnicodeDecodeError in multipart and in HTTP headers parsing.
#7044 <https://github.com/aio-libs/aiohttp/issues/7044>_
Changed sock_read timeout to start after writing has finished, avoiding read timeouts caused by an unfinished write. -- by :user:dtrifiro
#7149 <https://github.com/aio-libs/aiohttp/issues/7149>_
Fixed missing query in tracing method URLs when using yarl 1.9+.
#7259 <https://github.com/aio-libs/aiohttp/issues/7259>_
Changed max 32-bit timestamp to an aware datetime object, for consistency with the non-32-bit one, and to avoid a DeprecationWarning on Python 3.12.
#7302 <https://github.com/aio-libs/aiohttp/issues/7302>_
Fixed EmptyStreamReader.iter_chunks() never ending. -- by :user:mind1m
#7616 <https://github.com/aio-libs/aiohttp/issues/7616>_
Fixed a rare RuntimeError: await wasn't used with future exception. -- by :user:stalkerg
#7785 <https://github.com/aio-libs/aiohttp/issues/7785>_
Fixed issue with insufficient HTTP method and version validation.
#7700 <https://github.com/aio-libs/aiohttp/issues/7700>_
Added check to validate that absolute URIs have schemes.
#7712 <https://github.com/aio-libs/aiohttp/issues/7712>_
Fixed unhandled exception when Python HTTP parser encounters unpaired Unicode surrogates.
#7715 <https://github.com/aio-libs/aiohttp/issues/7715>_
Updated parser to disallow invalid characters in header field names and stop accepting LF as a request line separator.
#7719 <https://github.com/aio-libs/aiohttp/issues/7719>_
Fixed Python HTTP parser not treating 204/304/1xx as an empty body.
#7755 <https://github.com/aio-libs/aiohttp/issues/7755>_
Ensure empty body response for 1xx/204/304 per RFC 9112 sec 6.3.
#7756 <https://github.com/aio-libs/aiohttp/issues/7756>_
Fixed an issue when a client request is closed before completing a chunked payload. -- by :user:Dreamsorcerer
#7764 <https://github.com/aio-libs/aiohttp/issues/7764>_
Edge Case Handling for ResponseParser for missing reason value.
#7776 <https://github.com/aio-libs/aiohttp/issues/7776>_
Fixed ClientWebSocketResponse.close_code being erroneously set to None when there are concurrent async tasks receiving data and closing the connection.
#7306 <https://github.com/aio-libs/aiohttp/issues/7306>_
Added HTTP method validation.
#6533 <https://github.com/aio-libs/aiohttp/issues/6533>_
Fixed arbitrary sequence types being allowed to inject values via version parameter. -- by :user:Dreamsorcerer
#7835 <https://github.com/aio-libs/aiohttp/issues/7835>_
Performance: Fixed increase in latency with small messages from websocket compression changes.
#7797 <https://github.com/aio-libs/aiohttp/issues/7797>_
Fixed the ClientResponse.release's type in the doc. Changed from comethod to method.
#5836 <https://github.com/aio-libs/aiohttp/issues/5836>_
Added information on behavior of base_url parameter in ClientSession.
#6647 <https://github.com/aio-libs/aiohttp/issues/6647>_
Fixed ClientResponseError docs.
#6700 <https://github.com/aio-libs/aiohttp/issues/6700>_
Updated Redis code examples to follow the latest API.
#6907 <https://github.com/aio-libs/aiohttp/issues/6907>_
Added a note about possibly needing to update headers when using on_response_prepare. -- by :user:Dreamsorcerer
#7283 <https://github.com/aio-libs/aiohttp/issues/7283>_
Completed trust_env parameter description to honor wss_proxy, ws_proxy or no_proxy env.
#7325 <https://github.com/aio-libs/aiohttp/issues/7325>_
Expanded SSL documentation with more examples (e.g. how to use certifi). -- by :user:Dreamsorcerer
#7334 <https://github.com/aio-libs/aiohttp/issues/7334>_
Fix, update, and improve client exceptions documentation.
#7733 <https://github.com/aio-libs/aiohttp/issues/7733>_
Added shutdown_timeout parameter to BaseRunner, while
deprecating shutdown_timeout parameter from BaseSite. -- by :user:Dreamsorcerer
#7718 <https://github.com/aio-libs/aiohttp/issues/7718>_
Dropped Python 3.6 support.
#6378 <https://github.com/aio-libs/aiohttp/issues/6378>_
Dropped Python 3.7 support. -- by :user:Dreamsorcerer
#7336 <https://github.com/aio-libs/aiohttp/issues/7336>_
Removed support for abandoned tokio event loop. -- by :user:Dreamsorcerer
#7281 <https://github.com/aio-libs/aiohttp/issues/7281>_
Made print argument in run_app() optional.
#3690 <https://github.com/aio-libs/aiohttp/issues/3690>_
Improved performance of ceil_timeout in some cases.
#6316 <https://github.com/aio-libs/aiohttp/issues/6316>_
Changed importing Gunicorn to happen on-demand, decreasing import time by ~53%. -- :user:Dreamsorcerer
#6591 <https://github.com/aio-libs/aiohttp/issues/6591>_
Improved import time by replacing http.server with http.HTTPStatus.
#6903 <https://github.com/aio-libs/aiohttp/issues/6903>_
Fixed annotation of ssl parameter to disallow True. -- by :user:Dreamsorcerer.
#7335 <https://github.com/aio-libs/aiohttp/issues/7335>_
Upgraded the vendored copy of llhttp_ to v9.1.3 -- by :user:Dreamsorcerer
Thanks to :user:kenballus for reporting this, see
https://github.com/aio-libs/aiohttp/security/advisories/GHSA-pjjw-qhg8-p2p9.
.. _llhttp: https://llhttp.org
#7647 <https://github.com/aio-libs/aiohttp/issues/7647>_
Updated Python parser to comply with RFCs 9110/9112 -- by :user:Dreamorcerer
Thanks to :user:kenballus for reporting this, see
https://github.com/aio-libs/aiohttp/security/advisories/GHSA-gfw2-4jvh-wgfg.
#7663 <https://github.com/aio-libs/aiohttp/issues/7663>_
Added fallback_charset_resolver parameter in ClientSession to allow a user-supplied
character set detection function.
Character set detection will no longer be included in 3.9 as a default. If this feature is needed,
please use fallback_charset_resolver <https://docs.aiohttp.org/en/stable/client_advanced.html#character-set-detection>_.
#7561 <https://github.com/aio-libs/aiohttp/issues/7561>_
Enabled lenient response parsing for more flexible parsing in the client
(this should resolve some regressions when dealing with badly formatted HTTP responses). -- by :user:Dreamsorcerer
#7490 <https://github.com/aio-libs/aiohttp/issues/7490>_
Fixed PermissionError when .netrc is unreadable due to permissions.
#7237 <https://github.com/aio-libs/aiohttp/issues/7237>_
Fixed output of parsing errors pointing to a \n. -- by :user:Dreamsorcerer
#7468 <https://github.com/aio-libs/aiohttp/issues/7468>_
Fixed GunicornWebWorker max_requests_jitter not working.
#7518 <https://github.com/aio-libs/aiohttp/issues/7518>_
Fixed sorting in filter_cookies to use cookie with longest path. -- by :user:marq24.
#7577 <https://github.com/aio-libs/aiohttp/issues/7577>_
Fixed display of BadStatusLine messages from llhttp_. -- by :user:Dreamsorcerer
#7651 <https://github.com/aio-libs/aiohttp/issues/7651>_
Upgraded the vendored copy of llhttp_ to v8.1.1 -- by :user:webknjaz
and :user:Dreamsorcerer.
Thanks to :user:sethmlarson for reporting this and providing us with
comprehensive reproducer, workarounds and fixing details! For more
information, see
https://github.com/aio-libs/aiohttp/security/advisories/GHSA-45c4-8wx5-qw6w.
.. _llhttp: https://llhttp.org
#7346 <https://github.com/aio-libs/aiohttp/issues/7346>_
Added information to C parser exceptions to show which character caused the error. -- by :user:Dreamsorcerer
#7366 <https://github.com/aio-libs/aiohttp/issues/7366>_
Fixed a transport is :data:None error -- by :user:Dreamsorcerer.
#3355 <https://github.com/aio-libs/aiohttp/issues/3355>_
#6638 <https://github.com/aio-libs/aiohttp/issues/6638>_ConnectionResetError not being raised after client disconnection in SSL environments.
#7180 <https://github.com/aio-libs/aiohttp/issues/7180>_.. attention::
This is the last :doc:aiohttp <index> release tested under
Python 3.6. The 3.9 stream is dropping it from the CI and the
distribution package metadata.
Increased the upper boundary of the :doc:multidict:index dependency
to allow for the version 6 -- by :user:hugovk.
It used to be limited below version 7 in :doc:aiohttp <index> v3.8.1 but
was lowered in v3.8.2 via :pr:6550 and never brought back, causing
problems with dependency pins when upgrading. :doc:aiohttp <index> v3.8.3
fixes that by recovering the original boundary of < 7.
#6950 <https://github.com/aio-libs/aiohttp/issues/6950>_
Support registering OPTIONS HTTP method handlers via RouteTableDef.
#4663 <https://github.com/aio-libs/aiohttp/issues/4663>_
Started supporting authority-form and absolute-form URLs on the server-side.
#6227 <https://github.com/aio-libs/aiohttp/issues/6227>_
Fix Python 3.11 alpha incompatibilities by using Cython 0.29.25
#6396 <https://github.com/aio-libs/aiohttp/issues/6396>_
Remove a deprecated usage of pytest.warns(None)
#6663 <https://github.com/aio-libs/aiohttp/issues/6663>_
Fix regression where asyncio.CancelledError occurs on client disconnection.
#6719 <https://github.com/aio-libs/aiohttp/issues/6719>_
Export :py:class:~aiohttp.web.PrefixedSubAppResource under
:py:mod:aiohttp.web -- by :user:Dreamsorcerer.
This fixes a regression introduced by :pr:3469.
#6889 <https://github.com/aio-libs/aiohttp/issues/6889>_
Dropped the :class:object type possibility from
the :py:attr:aiohttp.ClientSession.timeout
property return type declaration.
#6917 <https://github.com/aio-libs/aiohttp/issues/6917>,
#6923 <https://github.com/aio-libs/aiohttp/issues/6923>
#4137 <https://github.com/aio-libs/aiohttp/issues/4137>_#6401 <https://github.com/aio-libs/aiohttp/issues/6401>_object type possibility from
the :py:attr:aiohttp.ClientSession.timeout
property return type declaration.
#6917 <https://github.com/aio-libs/aiohttp/issues/6917>,
#6923 <https://github.com/aio-libs/aiohttp/issues/6923>#4046 <https://github.com/aio-libs/aiohttp/issues/4046>_#6369 <https://github.com/aio-libs/aiohttp/issues/6369>, #6399 <https://github.com/aio-libs/aiohttp/issues/6399>, #6550 <https://github.com/aio-libs/aiohttp/issues/6550>, #6708 <https://github.com/aio-libs/aiohttp/issues/6708>, #6757 <https://github.com/aio-libs/aiohttp/issues/6757>, #6857 <https://github.com/aio-libs/aiohttp/issues/6857>, #6872 <https://github.com/aio-libs/aiohttp/issues/6872>_getaddrinfo.
getaddrinfo will return an (int, bytes) tuple, if CPython could not handle the address family.
It will cause an index out of range error in aiohttp. For example, if user compile CPython with
--disable-ipv6 option, but his system enable the ipv6.
#5901 <https://github.com/aio-libs/aiohttp/issues/5901>_#6189 <https://github.com/aio-libs/aiohttp/issues/6189>_#6195 <https://github.com/aio-libs/aiohttp/issues/6195>_Signal from __all__, replace aiohttp.Signal with aiosignal.Signal in docs
#6201 <https://github.com/aio-libs/aiohttp/issues/6201>_#6305 <https://github.com/aio-libs/aiohttp/issues/6305>_#6240 <https://github.com/aio-libs/aiohttp/issues/6240>_#6274 <https://github.com/aio-libs/aiohttp/issues/6274>_#6276 <https://github.com/aio-libs/aiohttp/issues/6276>_Dreamsorcerer.
#6278 <https://github.com/aio-libs/aiohttp/issues/6278>_#6205 <https://github.com/aio-libs/aiohttp/issues/6205>_Added a GunicornWebWorker feature for extending the aiohttp server configuration by allowing the 'wsgi' coroutine to return web.AppRunner object.
#2988 <https://github.com/aio-libs/aiohttp/issues/2988>_
Switch from http-parser to llhttp
#3561 <https://github.com/aio-libs/aiohttp/issues/3561>_
Use Brotli instead of brotlipy
#3803 <https://github.com/aio-libs/aiohttp/issues/3803>_
Disable implicit switch-back to pure python mode. The build fails loudly if aiohttp
cannot be compiled with C Accelerators. Use AIOHTTP_NO_EXTENSIONS=1 to explicitly
disable C Extensions complication and switch to Pure-Python mode. Note that Pure-Python
mode is significantly slower than compiled one.
#3828 <https://github.com/aio-libs/aiohttp/issues/3828>_
Make access log use local time with timezone
#3853 <https://github.com/aio-libs/aiohttp/issues/3853>_
Implemented readuntil in StreamResponse
#4054 <https://github.com/aio-libs/aiohttp/issues/4054>_
FileResponse now supports ETag.
#4594 <https://github.com/aio-libs/aiohttp/issues/4594>_
Add a request handler type alias aiohttp.typedefs.Handler.
#4686 <https://github.com/aio-libs/aiohttp/issues/4686>_
AioHTTPTestCase is more async friendly now.
For people who use unittest and are used to use :py:exc:~unittest.TestCase
it will be easier to write new test cases like the sync version of the :py:exc:~unittest.TestCase class,
without using the decorator @unittest_run_loop, just async def test_*.
The only difference is that for the people using python3.7 and below a new dependency is needed, it is asynctestcase.
#4700 <https://github.com/aio-libs/aiohttp/issues/4700>_
Add validation of HTTP header keys and values to prevent header injection.
#4818 <https://github.com/aio-libs/aiohttp/issues/4818>_
Add predicate to AbstractCookieJar.clear.
Add AbstractCookieJar.clear_domain to clean all domain and subdomains cookies only.
#4942 <https://github.com/aio-libs/aiohttp/issues/4942>_
Add keepalive_timeout parameter to web.run_app.
#5094 <https://github.com/aio-libs/aiohttp/issues/5094>_
Tracing for client sent headers
#5105 <https://github.com/aio-libs/aiohttp/issues/5105>_
Make type hints for http parser stricter
#5267 <https://github.com/aio-libs/aiohttp/issues/5267>_
Add final declarations for constants.
#5275 <https://github.com/aio-libs/aiohttp/issues/5275>_
Switch to external frozenlist and aiosignal libraries.
#5293 <https://github.com/aio-libs/aiohttp/issues/5293>_
Don't send secure cookies by insecure transports.
By default, the transport is secure if https or wss scheme is used.
Use CookieJar(treat_as_secure_origin="http://127.0.0.1") to override the default security checker.
#5571 <https://github.com/aio-libs/aiohttp/issues/5571>_
Always create a new event loop in aiohttp.web.run_app().
This adds better compatibility with asyncio.run() or if trying to run multiple apps in sequence.
#5572 <https://github.com/aio-libs/aiohttp/issues/5572>_
Add aiohttp.pytest_plugin.AiohttpClient for static typing of pytest plugin.
#5585 <https://github.com/aio-libs/aiohttp/issues/5585>_
Added a socket_factory argument to BaseTestServer.
#5844 <https://github.com/aio-libs/aiohttp/issues/5844>_
Add compression strategy parameter to enable_compression method.
#5909 <https://github.com/aio-libs/aiohttp/issues/5909>_
Added support for Python 3.10 to Github Actions CI/CD workflows and fix the related deprecation warnings -- :user:Hanaasagi.
#5927 <https://github.com/aio-libs/aiohttp/issues/5927>_
Switched chardet to charset-normalizer for guessing the HTTP payload body encoding -- :user:Ousret.
#5930 <https://github.com/aio-libs/aiohttp/issues/5930>_
Added optional auto_decompress argument for HttpRequestParser
#5957 <https://github.com/aio-libs/aiohttp/issues/5957>_
Added support for HTTPS proxies to the extent CPython's
:py:mod:asyncio supports it -- by :user:bmbouter,
:user:jborean93 and :user:webknjaz.
#5992 <https://github.com/aio-libs/aiohttp/issues/5992>_
Added base_url parameter to the initializer of :class:~aiohttp.ClientSession.
#6013 <https://github.com/aio-libs/aiohttp/issues/6013>_
Add Trove classifier and create binary wheels for 3.10. -- :user:hugovk.
#6079 <https://github.com/aio-libs/aiohttp/issues/6079>_
Started shipping platform-specific wheels with the musl tag targeting typical Alpine Linux runtimes — :user:asvetlov.
#6139 <https://github.com/aio-libs/aiohttp/issues/6139>_
Started shipping platform-specific arm64 wheels for Apple Silicon — :user:asvetlov.
#6139 <https://github.com/aio-libs/aiohttp/issues/6139>_
await resp.write(...) or ws.send_json(...) calls without race-condition.
#2934 <https://github.com/aio-libs/aiohttp/issues/2934>MultiLoopChildWatcher when it's available under POSIX while setting up the test I/O loop.
#3450 <https://github.com/aio-libs/aiohttp/issues/3450>_#4012 <https://github.com/aio-libs/aiohttp/issues/4012>_no_proxy environment variables.
#4431 <https://github.com/aio-libs/aiohttp/issues/4431>_#4648 <https://github.com/aio-libs/aiohttp/issues/4648>_#4748 <https://github.com/aio-libs/aiohttp/issues/4748>_#4799 <https://github.com/aio-libs/aiohttp/issues/4799>_#4984 <https://github.com/aio-libs/aiohttp/issues/4984>_#5106 <https://github.com/aio-libs/aiohttp/issues/5106>_#5107 <https://github.com/aio-libs/aiohttp/issues/5107>_#5192 <https://github.com/aio-libs/aiohttp/issues/5192>_#5233 <https://github.com/aio-libs/aiohttp/issues/5233>_routes.static('/foo', '/foo') no longer matches the URL /foobar. Previously, this would attempt to load the file /foo/ar.
#5250 <https://github.com/aio-libs/aiohttp/issues/5250>_#5259 <https://github.com/aio-libs/aiohttp/issues/5259>_andWSRequestContextManager``
#5329 <https://github.com/aio-libs/aiohttp/issues/5329>#5380 <https://github.com/aio-libs/aiohttp/issues/5380>_#5392 <https://github.com/aio-libs/aiohttp/issues/5392>_ClientResponse object on calls to the ok property for the failed requests.
#5403 <https://github.com/aio-libs/aiohttp/issues/5403>_params keyword argument in tracing URL.
#5432 <https://github.com/aio-libs/aiohttp/issues/5432>_#5466 <https://github.com/aio-libs/aiohttp/issues/5466>_tempfile.Temporaryfile-created
_io.BufferedRandom instances of files sent within multipart request
bodies via HTTP POST requests -- by :user:webknjaz.
#5494 <https://github.com/aio-libs/aiohttp/issues/5494>_#5527 <https://github.com/aio-libs/aiohttp/issues/5527>_#5554 <https://github.com/aio-libs/aiohttp/issues/5554>tests/autobahn/server.py with call to web.run_app; replace deprecated aiohttp.ws_connect calls in tests/autobahn/client.py with aiohttp.ClienSession.ws_connect.
#5606 <https://github.com/aio-libs/aiohttp/issues/5606>_HTTPUnauthorized that access the text argument. This is not used in any part of the code, so it's removed now.
#5657 <https://github.com/aio-libs/aiohttp/issues/5657>_#5727 <https://github.com/aio-libs/aiohttp/issues/5727>_#5840 <https://github.com/aio-libs/aiohttp/issues/5840>_#5853 <https://github.com/aio-libs/aiohttp/issues/5853>_params keyword argument to ClientSession.ws_connect. -- :user:hoh.
#5868 <https://github.com/aio-libs/aiohttp/issues/5868>_asyncio.ThreadedChildWatcher under POSIX to allow setting up test loop in non-main thread.
#5877 <https://github.com/aio-libs/aiohttp/issues/5877>_getaddrinfo.
getaddrinfo will return an (int, bytes) tuple, if CPython could not handle the address family.
It will cause a index out of range error in aiohttp. For example, if user compile CPython with
--disable-ipv6 option but his system enable the ipv6.
#5901 <https://github.com/aio-libs/aiohttp/issues/5901>_loop argument from the asyncio.sleep/gather calls
#5905 <https://github.com/aio-libs/aiohttp/issues/5905>_None from request.if_modified_since, request.if_unmodified_since, request.if_range and response.last_modified when corresponding http date headers are invalid.
#5925 <https://github.com/aio-libs/aiohttp/issues/5925>_SIGCHLD signals in Gunicorn aiohttp Worker to fix subprocesses that capture output having an incorrect returncode.
#6130 <https://github.com/aio-libs/aiohttp/issues/6130>_400: Content-Length can't be present with Transfer-Encoding if both Content-Length and Transfer-Encoding are sent by peer by both C and Python implementations
#6182 <https://github.com/aio-libs/aiohttp/issues/6182>_aio-openapi
#5326 <https://github.com/aio-libs/aiohttp/issues/5326>_#5725 <https://github.com/aio-libs/aiohttp/issues/5725>_Authorization header is removed
on redirects to a different host or protocol.
#5850 <https://github.com/aio-libs/aiohttp/issues/5850>_#3927 <https://github.com/aio-libs/aiohttp/issues/3927>, #4247 <https://github.com/aio-libs/aiohttp/issues/4247>, #4247 <https://github.com/aio-libs/aiohttp/issues/4247>, #5389 <https://github.com/aio-libs/aiohttp/issues/5389>, #5457 <https://github.com/aio-libs/aiohttp/issues/5457>, #5486 <https://github.com/aio-libs/aiohttp/issues/5486>, #5494 <https://github.com/aio-libs/aiohttp/issues/5494>, #5515 <https://github.com/aio-libs/aiohttp/issues/5515>, #5625 <https://github.com/aio-libs/aiohttp/issues/5625>, #5635 <https://github.com/aio-libs/aiohttp/issues/5635>, #5648 <https://github.com/aio-libs/aiohttp/issues/5648>, #5657 <https://github.com/aio-libs/aiohttp/issues/5657>, #5890 <https://github.com/aio-libs/aiohttp/issues/5890>, #5914 <https://github.com/aio-libs/aiohttp/issues/5914>, #5932 <https://github.com/aio-libs/aiohttp/issues/5932>, #6002 <https://github.com/aio-libs/aiohttp/issues/6002>, #6045 <https://github.com/aio-libs/aiohttp/issues/6045>, #6131 <https://github.com/aio-libs/aiohttp/issues/6131>, #6156 <https://github.com/aio-libs/aiohttp/issues/6156>, #6165 <https://github.com/aio-libs/aiohttp/issues/6165>, #6166 <https://github.com/aio-libs/aiohttp/issues/6166>_chardet runtime dependency
to allow their v4.0 version stream.
#5366 <https://github.com/aio-libs/aiohttp/issues/5366>_(SECURITY BUG) Started preventing open redirects in the
aiohttp.web.normalize_path_middleware middleware. For
more details, see
https://github.com/aio-libs/aiohttp/security/advisories/GHSA-v6wp-4m6f-gcjg.
Thanks to Beast Glatisant <https://github.com/g147>__ for
finding the first instance of this issue and Jelmer Vernooij <https://jelmer.uk/>__ for reporting and tracking it down
in aiohttp.
#5497 <https://github.com/aio-libs/aiohttp/issues/5497>_
Fix interpretation difference of the pure-Python and the Cython-based
HTTP parsers construct a yarl.URL object for HTTP request-target.
Before this fix, the Python parser would turn the URI's absolute-path
for //some-path into / while the Cython code preserved it as
//some-path. Now, both do the latter.
#5498 <https://github.com/aio-libs/aiohttp/issues/5498>_
#3803 <https://github.com/aio-libs/aiohttp/issues/3803>_#4077 <https://github.com/aio-libs/aiohttp/issues/4077>_#3532 <https://github.com/aio-libs/aiohttp/issues/3532>_web_middlewares.normalize_path_middleware behavior for patch without slash.
#3669 <https://github.com/aio-libs/aiohttp/issues/3669>_#3701 <https://github.com/aio-libs/aiohttp/issues/3701>_BaseConnector.close() a coroutine and wait until the client closes all connections. Drop deprecated "with Connector():" syntax.
#3736 <https://github.com/aio-libs/aiohttp/issues/3736>_sock_read timeout each time data is received for a aiohttp.client response.
#3808 <https://github.com/aio-libs/aiohttp/issues/3808>_#3880 <https://github.com/aio-libs/aiohttp/issues/3880>_#5156 <https://github.com/aio-libs/aiohttp/issues/5156>_#5163 <https://github.com/aio-libs/aiohttp/issues/5163>_#5230 <https://github.com/aio-libs/aiohttp/issues/5230>_aiohttp.web.FileResponse.
#3958 <https://github.com/aio-libs/aiohttp/issues/3958>_#3964 <https://github.com/aio-libs/aiohttp/issues/3964>_aiohttp.client.request.
#4603 <https://github.com/aio-libs/aiohttp/issues/4603>_#5228 <https://github.com/aio-libs/aiohttp/issues/5228>_#4102 <https://github.com/aio-libs/aiohttp/issues/4102>_.sendfile() support
#5149 <https://github.com/aio-libs/aiohttp/issues/5149>_Protocol.
#5111 <https://github.com/aio-libs/aiohttp/issues/5111>_#4901 <https://github.com/aio-libs/aiohttp/issues/4901>_#4957 <https://github.com/aio-libs/aiohttp/issues/4957>_typing_extensions library.
#5107 <https://github.com/aio-libs/aiohttp/issues/5107>_ThreadedResolver.resolve to
return the resolved IP as the hostname in each record, which prevented
validation of HTTPS connections.
#5110 <https://github.com/aio-libs/aiohttp/issues/5110>_#5115 <https://github.com/aio-libs/aiohttp/issues/5115>_#5116 <https://github.com/aio-libs/aiohttp/issues/5116>_#5124 <https://github.com/aio-libs/aiohttp/issues/5124>_web.run_app() about Python version checking on Windows
#5127 <https://github.com/aio-libs/aiohttp/issues/5127>_on_response_prepare hooks, directly before headers are sent to the client.
#1958 <https://github.com/aio-libs/aiohttp/issues/1958>_quote_cookie option to CookieJar, a way to skip quotation wrapping of cookies containing special characters.
#2571 <https://github.com/aio-libs/aiohttp/issues/2571>_AccessLogger.log with the current exception available from sys.exc_info().
#3557 <https://github.com/aio-libs/aiohttp/issues/3557>_web.UrlDispatcher.add_routes and web.Application.add_routes return a list
of registered AbstractRoute instances. AbstractRouteDef.register (and all
subclasses) return a list of registered resources registered resource.
#3866 <https://github.com/aio-libs/aiohttp/issues/3866>_#3882 <https://github.com/aio-libs/aiohttp/issues/3882>_OSError on reading/writing instead.
#4080 <https://github.com/aio-libs/aiohttp/issues/4080>_#4189 <https://github.com/aio-libs/aiohttp/issues/4189>_ClientSession.timeout property.
#4191 <https://github.com/aio-libs/aiohttp/issues/4191>_#4224 <https://github.com/aio-libs/aiohttp/issues/4224>_loop.sendfile() instead of custom implementation if available.
#4269 <https://github.com/aio-libs/aiohttp/issues/4269>_#4393 <https://github.com/aio-libs/aiohttp/issues/4393>_#4402 <https://github.com/aio-libs/aiohttp/issues/4402>_read_bufsize argument.
#4453 <https://github.com/aio-libs/aiohttp/issues/4453>_#4513 <https://github.com/aio-libs/aiohttp/issues/4513>_method and url attributes to TraceRequestChunkSentParams and TraceResponseChunkReceivedParams.
#4674 <https://github.com/aio-libs/aiohttp/issues/4674>_#4711 <https://github.com/aio-libs/aiohttp/issues/4711>_#4850 <https://github.com/aio-libs/aiohttp/issues/4850>_None is passed in as the host.
#4894 <https://github.com/aio-libs/aiohttp/issues/4894>_http_parser to 2.9.4
#5070 <https://github.com/aio-libs/aiohttp/issues/5070>_Fix keepalive connections not being closed in time
#3296 <https://github.com/aio-libs/aiohttp/issues/3296>_
Fix failed websocket handshake leaving connection hanging.
#3380 <https://github.com/aio-libs/aiohttp/issues/3380>_
Fix tasks cancellation order on exit. The run_app task needs to be cancelled first for cleanup hooks to run with all tasks intact.
#3805 <https://github.com/aio-libs/aiohttp/issues/3805>_
Don't start heartbeat until writer is set
#4062 <https://github.com/aio-libs/aiohttp/issues/4062>
Fix handling of multipart file uploads without a content type.
#4089 <https://github.com/aio-libs/aiohttp/issues/4089>_
Preserve view handler function attributes across middlewares
#4174 <https://github.com/aio-libs/aiohttp/issues/4174>_
Fix the string representation of ServerDisconnectedError.
#4175 <https://github.com/aio-libs/aiohttp/issues/4175>_
Raising RuntimeError when trying to get encoding from not read body
#4214 <https://github.com/aio-libs/aiohttp/issues/4214>_
Remove warning messages from noop.
#4282 <https://github.com/aio-libs/aiohttp/issues/4282>_
Raise ClientPayloadError if FormData re-processed.
#4345 <https://github.com/aio-libs/aiohttp/issues/4345>_
Fix a warning about unfinished task in web_protocol.py
#4408 <https://github.com/aio-libs/aiohttp/issues/4408>_
Fixed 'deflate' compression. According to RFC 2616 now.
#4506 <https://github.com/aio-libs/aiohttp/issues/4506>_
Fixed OverflowError on platforms with 32-bit time_t
#4515 <https://github.com/aio-libs/aiohttp/issues/4515>_
Fixed request.body_exists returns wrong value for methods without body.
#4528 <https://github.com/aio-libs/aiohttp/issues/4528>_
Fix connecting to link-local IPv6 addresses.
#4554 <https://github.com/aio-libs/aiohttp/issues/4554>_
Fix a problem with connection waiters that are never awaited.
#4562 <https://github.com/aio-libs/aiohttp/issues/4562>_
Always make sure transport is not closing before reuse a connection.
Reuse a protocol based on keepalive in headers is unreliable.
For example, uWSGI will not support keepalive even it serves a
HTTP 1.1 request, except explicitly configure uWSGI with a
--http-keepalive option.
Servers designed like uWSGI could cause aiohttp intermittently
raise a ConnectionResetException when the protocol poll runs
out and some protocol is reused.
#4587 <https://github.com/aio-libs/aiohttp/issues/4587>_
Handle the last CRLF correctly even if it is received via separate TCP segment.
#4630 <https://github.com/aio-libs/aiohttp/issues/4630>_
Fix the register_resource function to validate route name before splitting it so that route name can include python keywords.
#4691 <https://github.com/aio-libs/aiohttp/issues/4691>_
Improve typing annotations for web.Request, aiohttp.ClientResponse and
multipart module.
#4736 <https://github.com/aio-libs/aiohttp/issues/4736>_
Fix resolver task is not awaited when connector is cancelled
#4795 <https://github.com/aio-libs/aiohttp/issues/4795>_
Fix a bug "Aiohttp doesn't return any error on invalid request methods"
#4798 <https://github.com/aio-libs/aiohttp/issues/4798>_
Fix HEAD requests for static content.
#4809 <https://github.com/aio-libs/aiohttp/issues/4809>_
Fix incorrect size calculation for memoryview
#4890 <https://github.com/aio-libs/aiohttp/issues/4890>_
Add HTTPMove to all_.
#4897 <https://github.com/aio-libs/aiohttp/issues/4897>_
Fixed the type annotations in the tracing module.
#4912 <https://github.com/aio-libs/aiohttp/issues/4912>_
Fix typing for multipart __aiter__.
#4931 <https://github.com/aio-libs/aiohttp/issues/4931>_
Fix for race condition on connections in BaseConnector that leads to exceeding the connection limit.
#4936 <https://github.com/aio-libs/aiohttp/issues/4936>_
Add forced UTF-8 encoding for application/rdap+json responses.
#4938 <https://github.com/aio-libs/aiohttp/issues/4938>_
Fix inconsistency between Python and C http request parsers in parsing pct-encoded URL.
#4972 <https://github.com/aio-libs/aiohttp/issues/4972>_
Fix connection closing issue in HEAD request.
#5012 <https://github.com/aio-libs/aiohttp/issues/5012>_
Fix type hint on BaseRunner.addresses (from List[str] to List[Any])
#5086 <https://github.com/aio-libs/aiohttp/issues/5086>_
Make web.run_app() more responsive to Ctrl+C on Windows for Python < 3.8. It slightly
increases CPU load as a side effect.
#5098 <https://github.com/aio-libs/aiohttp/issues/5098>_
#3376 <https://github.com/aio-libs/aiohttp/issues/3376>_ttl_dns_cache default value
#3512 <https://github.com/aio-libs/aiohttp/issues/3512>_#4201 <https://github.com/aio-libs/aiohttp/issues/4201>_Optional[str] to Optional[bool]
#4204 <https://github.com/aio-libs/aiohttp/issues/4204>_ttl_dns_cache type from int to Optional[int].
#4270 <https://github.com/aio-libs/aiohttp/issues/4270>_#4272 <https://github.com/aio-libs/aiohttp/issues/4272>_#4285 <https://github.com/aio-libs/aiohttp/issues/4285>_#4312 <https://github.com/aio-libs/aiohttp/issues/4312>_#4314 <https://github.com/aio-libs/aiohttp/issues/4314>_#4810 <https://github.com/aio-libs/aiohttp/issues/4810>_#4986 <https://github.com/aio-libs/aiohttp/issues/4986>_aiohttp-sse-client library to third party usage list.
#5084 <https://github.com/aio-libs/aiohttp/issues/5084>_#2856 <https://github.com/aio-libs/aiohttp/issues/2856>, #4218 <https://github.com/aio-libs/aiohttp/issues/4218>, #4250 <https://github.com/aio-libs/aiohttp/issues/4250>_<1.6.0 to avoid buggy behavior that will be fixed by the next aiohttp
release.#4077 <https://github.com/aio-libs/aiohttp/issues/4077>_Iterable type hint instead of Sequence for Application middleware
parameter. #4125 <https://github.com/aio-libs/aiohttp/issues/4125>_sock_read timeout each time data is received for a
aiohttp.ClientResponse. #3808 <https://github.com/aio-libs/aiohttp/issues/3808>_#4063 <https://github.com/aio-libs/aiohttp/issues/4063>_ClientConnectorError;
self.ssl == None means default SSL context, not SSL disabled #4097 <https://github.com/aio-libs/aiohttp/issues/4097>_#4106 <https://github.com/aio-libs/aiohttp/issues/4106>_#2469 <https://github.com/aio-libs/aiohttp/issues/2469>_#4100 <https://github.com/aio-libs/aiohttp/issues/4100>_#4108 <https://github.com/aio-libs/aiohttp/issues/4108>_#4102 <https://github.com/aio-libs/aiohttp/issues/4102>_#4056 <https://github.com/aio-libs/aiohttp/issues/4056>_#4068 <https://github.com/aio-libs/aiohttp/issues/4068>_ssl.OP_NO_COMPRESSION is
unavailable because the runtime is built against
an outdated OpenSSL.
#4052 <https://github.com/aio-libs/aiohttp/issues/4052>_#4057 <https://github.com/aio-libs/aiohttp/issues/4057>_#3723 <https://github.com/aio-libs/aiohttp/issues/3723>_#3629 <https://github.com/aio-libs/aiohttp/issues/3629>_Transfer-Encoding: chunked header from websocket responses to be
compatible with more http proxy servers. #3798 <https://github.com/aio-libs/aiohttp/issues/3798>_#3980 <https://github.com/aio-libs/aiohttp/issues/3980>_Raise a ClientResponseError instead of an AssertionError for a blank
HTTP Reason Phrase.
#3532 <https://github.com/aio-libs/aiohttp/issues/3532>_
Fix an issue where cookies would sometimes not be set during a redirect.
#3576 <https://github.com/aio-libs/aiohttp/issues/3576>_
Change normalize_path_middleware to use '308 Permanent Redirect' instead of 301.
This behavior should prevent clients from being unable to use PUT/POST
methods on endpoints that are redirected because of a trailing slash.
#3579 <https://github.com/aio-libs/aiohttp/issues/3579>_
Drop the processed task from all_tasks() list early. It prevents logging about a
task with unhandled exception when the server is used in conjunction with
asyncio.run(). #3587 <https://github.com/aio-libs/aiohttp/issues/3587>_
Signal type annotation changed from Signal[Callable[['TraceConfig'], Awaitable[None]]] to Signal[Callable[ClientSession, SimpleNamespace, ...].
#3595 <https://github.com/aio-libs/aiohttp/issues/3595>_
Use sanitized URL as Location header in redirects
#3614 <https://github.com/aio-libs/aiohttp/issues/3614>_
Improve typing annotations for multipart.py along with changes required
by mypy in files that references multipart.py.
#3621 <https://github.com/aio-libs/aiohttp/issues/3621>_
Close session created inside aiohttp.request when unhandled exception occurs
#3628 <https://github.com/aio-libs/aiohttp/issues/3628>_
Cleanup per-chunk data in generic data read. Memory leak fixed.
#3631 <https://github.com/aio-libs/aiohttp/issues/3631>_
Use correct type for add_view and family
#3633 <https://github.com/aio-libs/aiohttp/issues/3633>_
Fix keepalive field in slots of RequestHandler.
#3644 <https://github.com/aio-libs/aiohttp/issues/3644>
Properly handle ConnectionResetError, to silence the "Cannot write to closing
transport" exception when clients disconnect uncleanly.
#3648 <https://github.com/aio-libs/aiohttp/issues/3648>_
Suppress pytest warnings due to test_utils classes
#3660 <https://github.com/aio-libs/aiohttp/issues/3660>_
Fix overshadowing of overlapped sub-application prefixes.
#3701 <https://github.com/aio-libs/aiohttp/issues/3701>_
Fixed return type annotation for WSMessage.json()
#3720 <https://github.com/aio-libs/aiohttp/issues/3720>_
Properly expose TooManyRedirects publicly as documented.
#3818 <https://github.com/aio-libs/aiohttp/issues/3818>_
Fix missing brackets for IPv6 in proxy CONNECT request
#3841 <https://github.com/aio-libs/aiohttp/issues/3841>_
Make the signature of aiohttp.test_utils.TestClient.request match
asyncio.ClientSession.request according to the docs #3852 <https://github.com/aio-libs/aiohttp/issues/3852>_
Use correct style for re-exported imports, makes mypy --strict mode happy.
#3868 <https://github.com/aio-libs/aiohttp/issues/3868>_
Fixed type annotation for add_view method of UrlDispatcher to accept any subclass of
View #3880 <https://github.com/aio-libs/aiohttp/issues/3880>_
Made cython HTTP parser set Reason-Phrase of the response to an empty string if it is
missing. #3906 <https://github.com/aio-libs/aiohttp/issues/3906>_
Add URL to the string representation of ClientResponseError.
#3959 <https://github.com/aio-libs/aiohttp/issues/3959>_
Accept istr keys in LooseHeaders type hints.
#3976 <https://github.com/aio-libs/aiohttp/issues/3976>_
Fixed race conditions in resolve_host caching and throttling when tracing is enabled.
#4013 <https://github.com/aio-libs/aiohttp/issues/4013>
For URLs like "unix://localhost/..." set Host HTTP header to "localhost" instead of
"localhost:None". #4039 <https://github.com/aio-libs/aiohttp/issues/4039>_
#3526 <https://github.com/aio-libs/aiohttp/issues/3526>_if __name__ == '__main__': in server examples.
#3775 <https://github.com/aio-libs/aiohttp/issues/3775>_#3783 <https://github.com/aio-libs/aiohttp/issues/3783>_web.BaseRequest.path and web.BaseRequest.raw_path.
#3791 <https://github.com/aio-libs/aiohttp/issues/3791>_#3964 <https://github.com/aio-libs/aiohttp/issues/3964>_.read() / .readany() / .iter_any() which used to return a
partial content only in case of compressed content
#3525 <https://github.com/aio-libs/aiohttp/issues/3525>_aiohttp.web.run_app(access_log=True) and fix edge case of
access_log=True and the event loop being in debug mode. #3504 <https://github.com/aio-libs/aiohttp/issues/3504>_aiohttp.ClientTimeout type annotations to accept None for fields
#3511 <https://github.com/aio-libs/aiohttp/issues/3511>_#3515 <https://github.com/aio-libs/aiohttp/issues/3515>_FileResponse from web_fileresponse.py uses a ThreadPoolExecutor to work
with files asynchronously. I/O based payloads from payload.py uses a
ThreadPoolExecutor to work with I/O objects asynchronously. #3313 <https://github.com/aio-libs/aiohttp/issues/3313>_#3483 <https://github.com/aio-libs/aiohttp/issues/3483>_Payload.headers are handled. Payload instances now always have headers and
Content-Type defined. Fix Payload Content-Disposition header reset after initial
creation. #3035 <https://github.com/aio-libs/aiohttp/issues/3035>_GunicornWebWorker.
#3464 <https://github.com/aio-libs/aiohttp/issues/3464>_#3468 <https://github.com/aio-libs/aiohttp/issues/3468>_#3471 <https://github.com/aio-libs/aiohttp/issues/3471>_#3477 <https://github.com/aio-libs/aiohttp/issues/3477>_collections.MutableMapping with collections.abc.MutableMapping to
avoid a deprecation warning. #3480 <https://github.com/aio-libs/aiohttp/issues/3480>_Payload.size type annotation changed from Optional[float] to
Optional[int]. #3484 <https://github.com/aio-libs/aiohttp/issues/3484>_web.run_app finalization.
#3497 <https://github.com/aio-libs/aiohttp/issues/3497>_aiohttp.web.HTTPException.
#3490 <https://github.com/aio-libs/aiohttp/issues/3490>_#3487 <https://github.com/aio-libs/aiohttp/issues/3487>_ClientSession._requote_redirect_url modification in debug
mode.#2387 <https://github.com/aio-libs/aiohttp/pull/2387>_)#2809 <https://github.com/aio-libs/aiohttp/pull/2809>_)app in the request returned by test_utils.make_mocked_request can
now have objects assigned to it and retrieved using the [] operator. (#3174 <https://github.com/aio-libs/aiohttp/pull/3174>_)request.url accessible when transport is closed. (#3177 <https://github.com/aio-libs/aiohttp/pull/3177>_)zlib_executor_size argument to Response constructor to allow compression
to run in a background executor to avoid blocking the main thread and potentially
triggering health check failures. (#3205 <https://github.com/aio-libs/aiohttp/pull/3205>_)ClientTimeout in aiohttp.request (#3213 <https://github.com/aio-libs/aiohttp/pull/3213>_)NETRC environment variable is not set and ~/.netrc
file doesn't exist. (#3267 <https://github.com/aio-libs/aiohttp/pull/3267>_)Application.debug``` flag is set and the default logger aiohttp.accessis used, access logs will now be output using a *stderr*StreamHandlerif no handlers are attached. Furthermore, if the default logger has no log level set, the log level will be set toDEBUG``. (#3324 <https://github.com/aio-libs/aiohttp/pull/3324>_)session.ws_connect(). Sometimes server API requires a
different HTTP method for WebSocket connection establishment. For example, Docker exec needs POST. (#3378 <https://github.com/aio-libs/aiohttp/pull/3378>_)#3406 <https://github.com/aio-libs/aiohttp/pull/3406>_)access_log_class via handler_args (#3158 <https://github.com/aio-libs/aiohttp/pull/3158>_)#3186 <https://github.com/aio-libs/aiohttp/pull/3186>_)CIMultiDictProxy instances for headers argument in web.Response
constructor. (#3207 <https://github.com/aio-libs/aiohttp/pull/3207>_)#3233 <https://github.com/aio-libs/aiohttp/pull/3233>_)#3235 <https://github.com/aio-libs/aiohttp/pull/3235>_)app.pre_frozen state to properly handle startup signals in
sub-applications. (#3237 <https://github.com/aio-libs/aiohttp/pull/3237>_)#3239 <https://github.com/aio-libs/aiohttp/pull/3239>_)#3258 <https://github.com/aio-libs/aiohttp/pull/3258>_)#3265 <https://github.com/aio-libs/aiohttp/pull/3265>_)#3273 <https://github.com/aio-libs/aiohttp/pull/3273>_)normalize_path_middleware. (#3278 <https://github.com/aio-libs/aiohttp/pull/3278>_)raise_for_status for aiohttp.request() (#3290 <https://github.com/aio-libs/aiohttp/pull/3290>_)#3304 <https://github.com/aio-libs/aiohttp/pull/3304>_)#3308 <https://github.com/aio-libs/aiohttp/pull/3308>_)#3337 <https://github.com/aio-libs/aiohttp/pull/3337>_)#3361 <https://github.com/aio-libs/aiohttp/pull/3361>_)#3364 <https://github.com/aio-libs/aiohttp/pull/3364>_)sendfile() syscall is used by static file
handling. (#3383 <https://github.com/aio-libs/aiohttp/pull/3383>_)asyncio.TimeoutError which was not logged, when it is caught
in the handler. (#3414 <https://github.com/aio-libs/aiohttp/pull/3414>_)Application.make_handler parameters. (#3152 <https://github.com/aio-libs/aiohttp/pull/3152>_)#3215 <https://github.com/aio-libs/aiohttp/pull/3215>_)web.Application._handle (#3229 <https://github.com/aio-libs/aiohttp/pull/3229>_)#3307 <https://github.com/aio-libs/aiohttp/pull/3307>_)session.requote_redirect_url (#2278 <https://github.com/aio-libs/aiohttp/pull/2278>_)stream.unread_data() (#3260 <https://github.com/aio-libs/aiohttp/pull/3260>_)resp.enable_compression() (#3318 <https://github.com/aio-libs/aiohttp/pull/3318>_)#3331 <https://github.com/aio-libs/aiohttp/pull/3331>_)Connection.detach() and Connection.writer. Both methods were broken
for more than 2 years. (#3358 <https://github.com/aio-libs/aiohttp/pull/3358>_)app.loop, request.loop, client.loop and connector.loop
properties. (#3374 <https://github.com/aio-libs/aiohttp/pull/3374>_)#3381 <https://github.com/aio-libs/aiohttp/pull/3381>_)#3385 <https://github.com/aio-libs/aiohttp/pull/3385>_)async with connector: and await connector.close() instead. (#3417 <https://github.com/aio-libs/aiohttp/pull/3417>_)read_timeout and conn_timeout in ClientSession
constructor. (#3438 <https://github.com/aio-libs/aiohttp/pull/3438>_)#3241 <https://github.com/aio-libs/aiohttp/pull/3241>_)app.pre_frozen state to properly handle startup signals in sub-applications. (#3237 <https://github.com/aio-libs/aiohttp/pull/3237>_)iter_chunks type annotation (#3230 <https://github.com/aio-libs/aiohttp/pull/3230>_)#3218 <https://github.com/aio-libs/aiohttp/pull/3218>_)#3215 <https://github.com/aio-libs/aiohttp/pull/3215>_)#3221 <https://github.com/aio-libs/aiohttp/pull/3221>_)#3049 <https://github.com/aio-libs/aiohttp/pull/3049>_)raise_for_status request parameter (#3073 <https://github.com/aio-libs/aiohttp/pull/3073>_)#3092 <https://github.com/aio-libs/aiohttp/pull/3092>_)#3095 <https://github.com/aio-libs/aiohttp/pull/3095>_)HTTPException is raised from another exception. (#3096 <https://github.com/aio-libs/aiohttp/pull/3096>_)close_boundary option in MultipartWriter.write method. Support streaming (#3104 <https://github.com/aio-libs/aiohttp/pull/3104>_)remove_slash option to the normalize_path_middleware factory. (#3173 <https://github.com/aio-libs/aiohttp/pull/3173>_)AbstractRouteDef is importable from aiohttp.web. (#3183 <https://github.com/aio-libs/aiohttp/pull/3183>_)data_received() callback. (#3031 <https://github.com/aio-libs/aiohttp/pull/3031>_)normalize_path_middleware work when using url encoded paths. (#3051 <https://github.com/aio-libs/aiohttp/pull/3051>_)#3052 <https://github.com/aio-libs/aiohttp/pull/3052>_)sock_read timeout. (#3053 <https://github.com/aio-libs/aiohttp/pull/3053>_)data= argument of a client request, iterate over the content with readany instead of readline to avoid Line too long errors. (#3054 <https://github.com/aio-libs/aiohttp/pull/3054>_)UrlDispatcher has no attribute add_options, add web.options (#3062 <https://github.com/aio-libs/aiohttp/pull/3062>_)#3064 <https://github.com/aio-libs/aiohttp/pull/3064>_)#3070 <https://github.com/aio-libs/aiohttp/pull/3070>_)#3087 <https://github.com/aio-libs/aiohttp/pull/3087>_)StreamResponse equality, now that they are MutableMapping objects. (#3100 <https://github.com/aio-libs/aiohttp/pull/3100>_)#3116 <https://github.com/aio-libs/aiohttp/pull/3116>_)206 Partial Content response with Content-Encoding: gzip (#3123 <https://github.com/aio-libs/aiohttp/pull/3123>_)#3145 <https://github.com/aio-libs/aiohttp/pull/3145>_)#3020 <https://github.com/aio-libs/aiohttp/pull/3020>_)#3072 <https://github.com/aio-libs/aiohttp/pull/3072>_)#3115 <https://github.com/aio-libs/aiohttp/pull/3115>_)#3146 <https://github.com/aio-libs/aiohttp/pull/3146>_)#3147 <https://github.com/aio-libs/aiohttp/pull/3147>_)#3151 <https://github.com/aio-libs/aiohttp/pull/3151>_)app.make_handler is deprecated, recommend to use runners
API instead. (#3157 <https://github.com/aio-libs/aiohttp/pull/3157>_)loop.current_task() from helpers.current_task() (#2826 <https://github.com/aio-libs/aiohttp/pull/2826>_)reader parameter from request.multipart(). (#3090 <https://github.com/aio-libs/aiohttp/pull/3090>_)Many HTTP proxies has buggy keepalive support. Let's not reuse connection but
close it after processing every response. (#3070 <https://github.com/aio-libs/aiohttp/pull/3070>_)
Provide vendor source files in tarball (#3076 <https://github.com/aio-libs/aiohttp/pull/3076>_)
sock_read timeout. (#3053 <https://github.com/aio-libs/aiohttp/pull/3053>_)data= argument of a client request,
iterate over the content with readany instead of readline to avoid Line too long errors. (#3054 <https://github.com/aio-libs/aiohttp/pull/3054>_)ConnectionResetError instead of CancelledError on trying to
write to a closed stream. (#2499 <https://github.com/aio-libs/aiohttp/pull/2499>_)ClientTimeout class and support socket read timeout. (#2768 <https://github.com/aio-libs/aiohttp/pull/2768>_)aiohttp.web is used as a program (#2956 <https://github.com/aio-libs/aiohttp/pull/2956>_)#2968 <https://github.com/aio-libs/aiohttp/pull/2968>_)#2983 <https://github.com/aio-libs/aiohttp/pull/2983>_)asyncio.streams.FlowControlMixin (#2986 <https://github.com/aio-libs/aiohttp/pull/2986>_)@helpers.reify, 5% boost on macro benchmark (#2995 <https://github.com/aio-libs/aiohttp/pull/2995>_)#3015 <https://github.com/aio-libs/aiohttp/pull/3015>_)runner.addresses property. (#3036 <https://github.com/aio-libs/aiohttp/pull/3036>_)bytearray instead of a list of bytes in websocket reader. It
improves websocket message reading a little. (#3039 <https://github.com/aio-libs/aiohttp/pull/3039>_)#3041 <https://github.com/aio-libs/aiohttp/pull/3041>_)#3045 <https://github.com/aio-libs/aiohttp/pull/3045>_)#2981 <https://github.com/aio-libs/aiohttp/pull/2981>_)#3009 <https://github.com/aio-libs/aiohttp/pull/3009>_)#3029 <https://github.com/aio-libs/aiohttp/pull/3029>_)#3030 <https://github.com/aio-libs/aiohttp/pull/3030>_)#3032 <https://github.com/aio-libs/aiohttp/pull/3032>_)#3021 <https://github.com/aio-libs/aiohttp/pull/3021>_)#2981 <https://github.com/aio-libs/aiohttp/pull/2981>_)TooManyRedirects exception when client gets redirected too many
times instead of returning last response. (#2631 <https://github.com/aio-libs/aiohttp/pull/2631>_)web_routedef.py file (#2876 <https://github.com/aio-libs/aiohttp/pull/2876>_)#2895 <https://github.com/aio-libs/aiohttp/pull/2895>_)#2925 <https://github.com/aio-libs/aiohttp/pull/2925>_)#2937 <https://github.com/aio-libs/aiohttp/pull/2937>_)#2948 <https://github.com/aio-libs/aiohttp/pull/2948>_)request.config_dict for exposing nested applications data. (#2949 <https://github.com/aio-libs/aiohttp/pull/2949>_)#2957 <https://github.com/aio-libs/aiohttp/pull/2957>_)#2966 <https://github.com/aio-libs/aiohttp/pull/2966>_)app for TestClient (#2891 <https://github.com/aio-libs/aiohttp/pull/2891>_)#2909 <https://github.com/aio-libs/aiohttp/pull/2909>_)__repr__ of resources (#2935 <https://github.com/aio-libs/aiohttp/pull/2935>_)#2942 <https://github.com/aio-libs/aiohttp/pull/2942>_)#2964 <https://github.com/aio-libs/aiohttp/pull/2964>_)async_timeout usage from documentation for client API in favor of
timeout parameter. (#2865 <https://github.com/aio-libs/aiohttp/pull/2865>_)#2921 <https://github.com/aio-libs/aiohttp/pull/2921>_).serialize() method with .write() in
documentation. (#2965 <https://github.com/aio-libs/aiohttp/pull/2965>_)#2938 <https://github.com/aio-libs/aiohttp/pull/2938>_)#2910 <https://github.com/aio-libs/aiohttp/pull/2910>_)Make LineTooLong exception more detailed about actual data size (#2863 <https://github.com/aio-libs/aiohttp/pull/2863>_)
Call on_chunk_sent when write_eof takes as a param the last chunk (#2909 <https://github.com/aio-libs/aiohttp/pull/2909>_)
#2802 <https://github.com/aio-libs/aiohttp/pull/2802>_)Welcome to aiohttp 3.1 release.
This is an incremental release, fully backward compatible with aiohttp 3.0.
But we have added several new features.
The most visible one is app.add_routes() (an alias for existing
app.router.add_routes(). The addition is very important because
all aiohttp docs now uses app.add_routes() call in code
snippets. All your existing code still do register routes / resource
without any warning but you've got the idea for a favorite way: noisy
app.router.add_get() is replaced by app.add_routes().
The library does not make a preference between decorators::
routes = web.RouteTableDef()
@routes.get('/') async def hello(request): return web.Response(text="Hello, world")
app.add_routes(routes)
and route tables as a list::
async def hello(request): return web.Response(text="Hello, world")
app.add_routes([web.get('/', hello)])
Both ways are equal, user may decide basing on own code taste.
Also we have a lot of minor features, bug fixes and documentation updates, see below.
ClientResponse.json() to allow
"application/xxx+json" instead of strict "application/json". (#2206 <https://github.com/aio-libs/aiohttp/pull/2206>_)#2730 <https://github.com/aio-libs/aiohttp/pull/2730>_)web.run_app and gunicorn
worker. (#2739 <https://github.com/aio-libs/aiohttp/pull/2739>_)app.cleanup_ctx property). (#2747 <https://github.com/aio-libs/aiohttp/pull/2747>_)writer.write_headers a coroutine. (#2762 <https://github.com/aio-libs/aiohttp/pull/2762>_)#2767 <https://github.com/aio-libs/aiohttp/pull/2767>_)#2781 <https://github.com/aio-libs/aiohttp/pull/2781>_)app.add_routes() method. (#2787 <https://github.com/aio-libs/aiohttp/pull/2787>_)web.static() and RouteTableDef.static() API. (#2795 <https://github.com/aio-libs/aiohttp/pull/2795>_)asyncio.set_event_loop(). The
change affects aiohttp test utils but backward compatibility is not broken
for 99.99% of use cases. (#2804 <https://github.com/aio-libs/aiohttp/pull/2804>_)ClientResponse constructor: make logically required constructor
arguments mandatory, drop _post_init() method. (#2820 <https://github.com/aio-libs/aiohttp/pull/2820>_)app.add_routes() in server docs everywhere (#2830 <https://github.com/aio-libs/aiohttp/pull/2830>_)#2836 <https://github.com/aio-libs/aiohttp/pull/2836>_)Content-Range header for Range requests (#2844 <https://github.com/aio-libs/aiohttp/pull/2844>_)#2784 <https://github.com/aio-libs/aiohttp/pull/2784>_)#2789 <https://github.com/aio-libs/aiohttp/pull/2789>_)BaseRequest.http_range now returns a python-like slice when
requesting the tail of the range. It's now indicated by a negative value in
range.start rather then in range.stop (#2805 <https://github.com/aio-libs/aiohttp/pull/2805>_)#2827 <https://github.com/aio-libs/aiohttp/pull/2827>_)#2841 <https://github.com/aio-libs/aiohttp/pull/2841>_)#2732 <https://github.com/aio-libs/aiohttp/pull/2732>_)#2748 <https://github.com/aio-libs/aiohttp/pull/2748>_)StreamReader as data at client
side. (#2793 <https://github.com/aio-libs/aiohttp/pull/2793>_)#2827 <https://github.com/aio-libs/aiohttp/pull/2827>_)asyncio.current_task() on Python 3.7 (#2825 <https://github.com/aio-libs/aiohttp/pull/2825>_)#2810 <https://github.com/aio-libs/aiohttp/pull/2810>_)setup.py for python version. The check
works in parallel to environment marker. As effect an error about unsupported
Python versions is raised even on outdated systems with very old
setuptools version installed. (#2813 <https://github.com/aio-libs/aiohttp/pull/2813>_)_reuse_address and _reuse_port to
web_runner.TCPSite.__slots__. (#2792 <https://github.com/aio-libs/aiohttp/pull/2792>_)InvalidStateError on processing a sequence of two
RequestHandler.data_received calls on web server. (#2773 <https://github.com/aio-libs/aiohttp/pull/2773>_)IndexError in HTTP request handling by server. (#2752 <https://github.com/aio-libs/aiohttp/pull/2752>_)#2759 <https://github.com/aio-libs/aiohttp/pull/2759>_)attrs dependency to minimal actually supported version
17.0.3 The change allows to avoid version conflicts with currently
existing test tools./static/D:\path and /static/\\hostname\drive\path are
forbidden.PayloadWriter.write method for large request bodies. (#2126 <https://github.com/aio-libs/aiohttp/pull/2126>_)#2246 <https://github.com/aio-libs/aiohttp/pull/2246>_)#2313 <https://github.com/aio-libs/aiohttp/pull/2313>_)#2455 <https://github.com/aio-libs/aiohttp/pull/2455>_)#2472 <https://github.com/aio-libs/aiohttp/pull/2472>_)#2480 <https://github.com/aio-libs/aiohttp/pull/2480>_)async with test_client.ws_connect(...) (#2525 <https://github.com/aio-libs/aiohttp/pull/2525>_)web.run_app
implementation. (#2530 <https://github.com/aio-libs/aiohttp/pull/2530>_)#2544 <https://github.com/aio-libs/aiohttp/pull/2544>_)aiohttp.ClientResponse.get_encoding method public with the
processing of invalid charset while detecting content encoding. (#2549 <https://github.com/aio-libs/aiohttp/pull/2549>_)ClientWebSocketResponse and WebSocketResponse. (#2551 <https://github.com/aio-libs/aiohttp/pull/2551>_)StreamReader to prevent flipping between paused and
resumed states too often. (#2555 <https://github.com/aio-libs/aiohttp/pull/2555>_).netrc by trust_env (#2581 <https://github.com/aio-libs/aiohttp/pull/2581>_)#2586 <https://github.com/aio-libs/aiohttp/pull/2586>_)MultipartWriter.boundary is str now. (#2589 <https://github.com/aio-libs/aiohttp/pull/2589>_)TestServer (and associated pytest
fixtures) (#2613 <https://github.com/aio-libs/aiohttp/pull/2613>_)#2615 <https://github.com/aio-libs/aiohttp/pull/2615>_)ssl parameter to client API (#2626 <https://github.com/aio-libs/aiohttp/pull/2626>_)#2629 <https://github.com/aio-libs/aiohttp/pull/2629>_)#2654 <https://github.com/aio-libs/aiohttp/pull/2654>_)run_app and
TCPSite. (#2679 <https://github.com/aio-libs/aiohttp/pull/2679>_)#2686 <https://github.com/aio-libs/aiohttp/pull/2686>_)attrs library for data classes, replace namedtuple. (#2690 <https://github.com/aio-libs/aiohttp/pull/2690>_)aiohttp_ prefix (#2578 <https://github.com/aio-libs/aiohttp/pull/2578>_)aiohttp- prefix for pytest-aiohttp command line
parameters (#2578 <https://github.com/aio-libs/aiohttp/pull/2578>_)aiohttp does not
support HTTP2 yet, the protocol is not upgraded but response is handled
correctly. (#2277 <https://github.com/aio-libs/aiohttp/pull/2277>_)#2408 <https://github.com/aio-libs/aiohttp/pull/2408>_)#2423 <https://github.com/aio-libs/aiohttp/pull/2423>_)#2424 <https://github.com/aio-libs/aiohttp/pull/2424>_)asyncio.CancelledError (#2499 <https://github.com/aio-libs/aiohttp/pull/2499>_)ClientSession.__del__ by stopping to try to close it.
(#2523 <https://github.com/aio-libs/aiohttp/pull/2523>_)#2620 <https://github.com/aio-libs/aiohttp/pull/2620>_)access_log_format argument in web.run_app (#2649 <https://github.com/aio-libs/aiohttp/pull/2649>_)#2656 <https://github.com/aio-libs/aiohttp/pull/2656>_).url_for() parameters (#2668 <https://github.com/aio-libs/aiohttp/pull/2668>_)#2641 <https://github.com/aio-libs/aiohttp/pull/2641>_)literalinclude to link to the actual files.
(#2396 <https://github.com/aio-libs/aiohttp/pull/2396>_)#2401 <https://github.com/aio-libs/aiohttp/pull/2401>_)from_env to trust_env in client reference. (#2451 <https://github.com/aio-libs/aiohttp/pull/2451>_)Proxy Support section where trust_env parameter was
used in session.get("http://python.org", trust_env=True) method instead of
aiohttp.ClientSession constructor as follows:
aiohttp.ClientSession(trust_env=True). (#2688 <https://github.com/aio-libs/aiohttp/pull/2688>_)#2717 <https://github.com/aio-libs/aiohttp/pull/2717>_)#2109 <https://github.com/aio-libs/aiohttp/pull/2109>_)StreamReaderPayload and DataQueuePayload. (#2257 <https://github.com/aio-libs/aiohttp/pull/2257>_)md5 and sha1 finger-prints (#2267 <https://github.com/aio-libs/aiohttp/pull/2267>_)#2321 <https://github.com/aio-libs/aiohttp/pull/2321>_)yield from is gone, use async/await syntax.
(#2343 <https://github.com/aio-libs/aiohttp/pull/2343>_)aiohttp.Timeout and use async_timeout.timeout instead. (#2348 <https://github.com/aio-libs/aiohttp/pull/2348>_)resolve param from TCPConnector. (#2377 <https://github.com/aio-libs/aiohttp/pull/2377>_)#2415 <https://github.com/aio-libs/aiohttp/pull/2415>_)send_str(), send_bytes(), send_json(), ping() and pong() are
genuine async functions now. (#2475 <https://github.com/aio-libs/aiohttp/pull/2475>_)app.on_pre_signal and app.on_post_signal. Signal
handlers should be coroutines, support for regular functions is dropped.
(#2480 <https://github.com/aio-libs/aiohttp/pull/2480>_)StreamResponse.drain() is not a part of public API anymore, just use await StreamResponse.write(). StreamResponse.write is converted to async
function. (#2483 <https://github.com/aio-libs/aiohttp/pull/2483>_)slow_request_timeout param and **kwargs`` from RequestHandler. (#2500 https://github.com/aio-libs/aiohttp/pull/2500`_)resource.url(). (#2501 <https://github.com/aio-libs/aiohttp/pull/2501>_)%u and %l format specifiers from access log format. (#2506 <https://github.com/aio-libs/aiohttp/pull/2506>_)request.GET property. (#2547 <https://github.com/aio-libs/aiohttp/pull/2547>_)ChunksQueue and FlowControlChunksQueue,
merge FlowControlStreamReader functionality into StreamReader, drop
FlowControlStreamReader name. (#2555 <https://github.com/aio-libs/aiohttp/pull/2555>_)router.add_get(..., allow_head=True)
(#2585 <https://github.com/aio-libs/aiohttp/pull/2585>_)#2604 <https://github.com/aio-libs/aiohttp/pull/2604>_)encoding parameter from client API (#2606 <https://github.com/aio-libs/aiohttp/pull/2606>_)verify_ssl, ssl_context and fingerprint parameters in
client API (#2626 <https://github.com/aio-libs/aiohttp/pull/2626>_)#2651 <https://github.com/aio-libs/aiohttp/pull/2651>_)resource.url_for() parameters. (#2668 <https://github.com/aio-libs/aiohttp/pull/2668>_)ClientSession and web.Application and
custom user attributes for ClientSession, web.Request and
web.Application (#2691 <https://github.com/aio-libs/aiohttp/pull/2691>_)resp = await aiohttp.request(...) syntax for sake of async with aiohttp.request(...) as resp:. (#2540 <https://github.com/aio-libs/aiohttp/pull/2540>_)ClientSession and test
server/client. (#2362 <https://github.com/aio-libs/aiohttp/pull/2362>_)#1955 <https://github.com/aio-libs/aiohttp/pull/1955>_)ssl.match_hostname() on Python<3.7 (#2674 <https://github.com/aio-libs/aiohttp/pull/2674>_)#2670 <https://github.com/aio-libs/aiohttp/pull/2670>_)yarl.unquote internal function in aiohttp. Fix
incorrectly unquoted path part in URL dispatcher (#2662 <https://github.com/aio-libs/aiohttp/pull/2662>_)yarl==1.0.0 (#2662 <https://github.com/aio-libs/aiohttp/pull/2662>_)#2620 <https://github.com/aio-libs/aiohttp/pull/2620>_)#2591 <https://github.com/aio-libs/aiohttp/pull/2591>_)#2592 <https://github.com/aio-libs/aiohttp/pull/2592>_)request.app context (for handlers not just middlewares). (#2577 <https://github.com/aio-libs/aiohttp/pull/2577>_)pytest 3.3+ (#2565 <https://github.com/aio-libs/aiohttp/pull/2565>_)request.app point to proper application instance when using nested
applications (with middlewares). (#2550 <https://github.com/aio-libs/aiohttp/pull/2550>_)#2563 <https://github.com/aio-libs/aiohttp/pull/2563>_)connector.connect().
(#2567 <https://github.com/aio-libs/aiohttp/pull/2567>_); in Response content type does not assume it contains a charset
anymore. (#2197 <https://github.com/aio-libs/aiohttp/pull/2197>_)getattr(asyncio, 'async') for keeping compatibility with Python 3.7.
(#2476 <https://github.com/aio-libs/aiohttp/pull/2476>_)NotImplementedError raised by set_child_watcher from uvloop.
(#2491 <https://github.com/aio-libs/aiohttp/pull/2491>_)ClientSession.__del__ by stopping to try to close it.
(#2523 <https://github.com/aio-libs/aiohttp/pull/2523>_)#2510 <https://github.com/aio-libs/aiohttp/pull/2510>_)#2385 <https://github.com/aio-libs/aiohttp/pull/2385>_)#2408 <https://github.com/aio-libs/aiohttp/pull/2408>_)_http_parser shared object from tarball distribution. (#2414 <https://github.com/aio-libs/aiohttp/pull/2414>_)#2423 <https://github.com/aio-libs/aiohttp/pull/2423>_)#2424 <https://github.com/aio-libs/aiohttp/pull/2424>_)aiohttp.web.run_app function. (#2431 <https://github.com/aio-libs/aiohttp/pull/2431>_)_SessionRequestContextManager closes the session properly now. (#2441 <https://github.com/aio-libs/aiohttp/pull/2441>_)from_env to trust_env in client reference. (#2451 <https://github.com/aio-libs/aiohttp/pull/2451>_)#2340 <https://github.com/aio-libs/aiohttp/pull/2340>_)ClientSession.request (#1128 <https://github.com/aio-libs/aiohttp/pull/1128>_)#1828 <https://github.com/aio-libs/aiohttp/pull/1828>_)#1993 <https://github.com/aio-libs/aiohttp/pull/1993>_)multidict 3.0. All HTTP headers preserve casing now but compared
in case-insensitive way. (#1994 <https://github.com/aio-libs/aiohttp/pull/1994>_)normalize_path_middleware. Added possibility to handle URLs
with query string. (#1995 <https://github.com/aio-libs/aiohttp/pull/1995>_)#1997 <https://github.com/aio-libs/aiohttp/pull/1997>_)trust_env=True param in ClientSession. (#1998 <https://github.com/aio-libs/aiohttp/pull/1998>_)#2001 <https://github.com/aio-libs/aiohttp/pull/2001>_)router.add_routes and router decorators. (#2004 <https://github.com/aio-libs/aiohttp/pull/2004>_)BaseRequest.has_body in favor of
BaseRequest.can_read_body Added BaseRequest.body_exists
attribute that stays static for the lifetime of the request (#2005 <https://github.com/aio-libs/aiohttp/pull/2005>_)BaseRequest.loop attribute (#2024 <https://github.com/aio-libs/aiohttp/pull/2024>_)_CoroGuard awaitable and fix ClientSession.close warning message
(#2026 <https://github.com/aio-libs/aiohttp/pull/2026>_)#2030 <https://github.com/aio-libs/aiohttp/pull/2030>_)get_client, get_server, setUpAsync and tearDownAsync methods to
AioHTTPTestCase (#2032 <https://github.com/aio-libs/aiohttp/pull/2032>_)#2058 <https://github.com/aio-libs/aiohttp/pull/2058>_)#2110 <https://github.com/aio-libs/aiohttp/pull/2110>_)#2111 <https://github.com/aio-libs/aiohttp/pull/2111>_)RequestBase.remote property for accessing to IP of client
initiated HTTP request. (#2123 <https://github.com/aio-libs/aiohttp/pull/2123>_)#2136 <https://github.com/aio-libs/aiohttp/pull/2136>_)#2150 <https://github.com/aio-libs/aiohttp/pull/2150>_)append_version arg into StaticResource.url and
StaticResource.url_for methods for getting an url with hash (version) of
the file. (#2157 <https://github.com/aio-libs/aiohttp/pull/2157>_)#2173 <https://github.com/aio-libs/aiohttp/pull/2173>)RuntimeError if HTTPS protocol is required but ssl module is not present.
(#2221 <https://github.com/aio-libs/aiohttp/pull/2221>_)#2223 <https://github.com/aio-libs/aiohttp/pull/2223>_)shutdown_asyncgens before event loop closing on Python 3.6. (#2227 <https://github.com/aio-libs/aiohttp/pull/2227>_)#2229 <https://github.com/aio-libs/aiohttp/pull/2229>_)InvalidURL instead of ValueError on fetches with invalid URL.
(#2241 <https://github.com/aio-libs/aiohttp/pull/2241>_)DummyCookieJar into cookiejar.py (#2242 <https://github.com/aio-libs/aiohttp/pull/2242>_)run_app: Make print=None disable printing (#2260 <https://github.com/aio-libs/aiohttp/pull/2260>_)brotli encoding (generic-purpose lossless compression algorithm)
(#2270 <https://github.com/aio-libs/aiohttp/pull/2270>_)compress=15 the client will support deflate
compress negotiation. (#2273 <https://github.com/aio-libs/aiohttp/pull/2273>_)verify_ssl, fingerprint, ssl_context and proxy_headers by
client.ws_connect. (#2292 <https://github.com/aio-libs/aiohttp/pull/2292>_)aiohttp.ClientConnectorSSLError when connection fails due
ssl.SSLError (#2294 <https://github.com/aio-libs/aiohttp/pull/2294>_)aiohttp.web.Application.make_handler support access_log_class (#2315 <https://github.com/aio-libs/aiohttp/pull/2315>_)#2332 <https://github.com/aio-libs/aiohttp/pull/2332>_)#1699 <https://github.com/aio-libs/aiohttp/pull/1699>_)#2060 <https://github.com/aio-libs/aiohttp/pull/2060>_)ClientSession as an
asynchronous context manager. (#2063 <https://github.com/aio-libs/aiohttp/pull/2063>_)CookieJar incorrectly expiring cookies in some edge cases.
(#2084 <https://github.com/aio-libs/aiohttp/pull/2084>_)#2104 <https://github.com/aio-libs/aiohttp/pull/2104>_)#2106 <https://github.com/aio-libs/aiohttp/pull/2106>_)IndexError being raised by the StreamReader.iter_chunks()
generator. (#2112 <https://github.com/aio-libs/aiohttp/pull/2112>_)#2114 <https://github.com/aio-libs/aiohttp/pull/2114>_)FileResponse sending empty chunked body on 304. (#2143 <https://github.com/aio-libs/aiohttp/pull/2143>_)Content-Length: 0 to GET/HEAD/TRACE/OPTIONS requests by default.
(#2167 <https://github.com/aio-libs/aiohttp/pull/2167>_)#2170 <https://github.com/aio-libs/aiohttp/pull/2170>_)#2171 <https://github.com/aio-libs/aiohttp/pull/2171>_)#2183 <https://github.com/aio-libs/aiohttp/pull/2183>_)KeyError: <aiohttp.connector._TransportPlaceholder> (#2193 <https://github.com/aio-libs/aiohttp/pull/2193>_)TypeError in helpers.guess_filename if name is not a
string (#2201 <https://github.com/aio-libs/aiohttp/pull/2201>_)#2231 <https://github.com/aio-libs/aiohttp/pull/2231>_)StreamReader. (#2251 <https://github.com/aio-libs/aiohttp/pull/2251>_)#2284 <https://github.com/aio-libs/aiohttp/pull/2284>_)#2311 <https://github.com/aio-libs/aiohttp/pull/2311>_)web.FileResponse overriding user supplied Content-Type (#2317 <https://github.com/aio-libs/aiohttp/pull/2317>_)await resp.text() if
charset was not provided by Content-Type HTTP header. Pass explicit
encoding to solve it. (#1811 <https://github.com/aio-libs/aiohttp/pull/1811>_)disqus widget from documentation pages. (#2018 <https://github.com/aio-libs/aiohttp/pull/2018>_)#2039 <https://github.com/aio-libs/aiohttp/pull/2039>_)connector_owner parameter. (#2072 <https://github.com/aio-libs/aiohttp/pull/2072>_)#2081 <https://github.com/aio-libs/aiohttp/pull/2081>_)#2085 <https://github.com/aio-libs/aiohttp/pull/2085>_)#2131 <https://github.com/aio-libs/aiohttp/pull/2131>_)encoded=True for yarl.URL, it disables all yarl transformations.
(#2198 <https://github.com/aio-libs/aiohttp/pull/2198>_)#2225 <https://github.com/aio-libs/aiohttp/pull/2225>_)#2228 <https://github.com/aio-libs/aiohttp/pull/2228>_)Server.finish_connections (#2006 <https://github.com/aio-libs/aiohttp/pull/2006>_)#2123 <https://github.com/aio-libs/aiohttp/pull/2123>_)#2171 <https://github.com/aio-libs/aiohttp/pull/2171>_)#2176 <https://github.com/aio-libs/aiohttp/pull/2176>_)#2290 <https://github.com/aio-libs/aiohttp/pull/2290>_)loop.run_until_complete(client.close()) (#2065 <https://github.com/aio-libs/aiohttp/pull/2065>_)#2063 <https://github.com/aio-libs/aiohttp/pull/2063>_)_CoroGuard for python 3.4await session.close() along with yield from session.close()yarl requirement to 0.11+session.close is a coroutine (#2029 <https://github.com/aio-libs/aiohttp/pull/2029>_)#1944 <https://github.com/aio-libs/aiohttp/pull/1944>_)Response.write_eof.__doc__) when registering synchronous
handlers for resources. (#1953 <https://github.com/aio-libs/aiohttp/pull/1953>_)run_app to gracefully exit (#1932 <https://github.com/aio-libs/aiohttp/pull/1932>_)#1962 <https://github.com/aio-libs/aiohttp/pull/1962>_)#1941 <https://github.com/aio-libs/aiohttp/pull/1941>_)unittest_run_loop#1970 <https://github.com/aio-libs/aiohttp/pull/1970>_)run_app() are not raise
DeprecationWarning now (#1947 <https://github.com/aio-libs/aiohttp/pull/1947>_)#1959 <https://github.com/aio-libs/aiohttp/pull/1959>_)#1955 <https://github.com/aio-libs/aiohttp/pull/1955>_)await aiohttp.request(..) is used (#1981 <https://github.com/aio-libs/aiohttp/pull/1981>_)#1969 <https://github.com/aio-libs/aiohttp/pull/1969>_)ClientPayloadError with blank Content-Encoding header (#1931 <https://github.com/aio-libs/aiohttp/pull/1931>_)deflate encoding implemented in httpbin.org/deflate (#1918 <https://github.com/aio-libs/aiohttp/pull/1918>_)CRLF after POST data (#1792 <https://github.com/aio-libs/aiohttp/pull/1792>_)ClientSession in response object (#1985 <https://github.com/aio-libs/aiohttp/pull/1985>_)app.on_loop_available signal (#1978 <https://github.com/aio-libs/aiohttp/pull/1978>_)async-tokio event loop written in Rust
https://github.com/PyO3/tokio\r\n before closing after keepalive timeout,
otherwise client can not detect socket disconnection. (#1883 <https://github.com/aio-libs/aiohttp/pull/1883>_)loop.close in run_app if the user did not supply a loop.
Useful for allowing clients to specify their own cleanup before closing the
asyncio loop if they wish to tightly control loop behavior#917 <https://github.com/aio-libs/aiohttp/pull/917>_)request_info to response object and ClientResponseError. (#1733 <https://github.com/aio-libs/aiohttp/pull/1733>_)history to ClientResponseError. (#1741 <https://github.com/aio-libs/aiohttp/pull/1741>_)#1474 <https://github.com/aio-libs/aiohttp/pull/1474>_)#1790 <https://github.com/aio-libs/aiohttp/pull/1790>_)#1673 <https://github.com/aio-libs/aiohttp/pull/1673>_)args and kwargs to unittest_run_loop. Useful with other
decorators, for example @patch. (#1803 <https://github.com/aio-libs/aiohttp/pull/1803>_)iter_chunks to response.content object. (#1805 <https://github.com/aio-libs/aiohttp/pull/1805>_)#1817 <https://github.com/aio-libs/aiohttp/pull/1817>) (#1180 <https://github.com/aio-libs/aiohttp/pull/1180>)proxy_from_env to ClientRequest to read from environment
variables. (#1791 <https://github.com/aio-libs/aiohttp/pull/1791>_)#1830 <https://github.com/aio-libs/aiohttp/pull/1830>_)#1847 <https://github.com/aio-libs/aiohttp/pull/1847>_)+ in match_info values (#1816 <https://github.com/aio-libs/aiohttp/pull/1816>_)#1134 <https://github.com/aio-libs/aiohttp/pull/1134>_)#1853 <https://github.com/aio-libs/aiohttp/pull/1853>_)#1866 <https://github.com/aio-libs/aiohttp/pull/1866>_)#1662 <https://github.com/aio-libs/aiohttp/pull/1662>_)#1896 <https://github.com/aio-libs/aiohttp/pull/1896>_)#1920 <https://github.com/aio-libs/aiohttp/pull/1920>_)#1807 <https://github.com/aio-libs/aiohttp/pull/1807>_)#1773 <https://github.com/aio-libs/aiohttp/pull/1773>_)#1793 <https://github.com/aio-libs/aiohttp/pull/1793>_)request.post() and multipart.form() (#1765 <https://github.com/aio-libs/aiohttp/pull/1765>_)#1770 <https://github.com/aio-libs/aiohttp/pull/1770>_)web.run_app not to bind to default host-port pair if only socket is
passed (#1786 <https://github.com/aio-libs/aiohttp/pull/1786>_)#1756 <https://github.com/aio-libs/aiohttp/pull/1756>_)#1761 <https://github.com/aio-libs/aiohttp/pull/1761>_)#1756 <https://github.com/aio-libs/aiohttp/pull/1756>_)#1750 <https://github.com/aio-libs/aiohttp/pull/1750>_)#1755 <https://github.com/aio-libs/aiohttp/pull/1755>_)#1745 <https://github.com/aio-libs/aiohttp/pull/1745>_)#1743 <https://github.com/aio-libs/aiohttp/pull/1743>_)#1739 <https://github.com/aio-libs/aiohttp/pull/1739>_)#1737 <https://github.com/aio-libs/aiohttp/pull/1737>_)#1736 <https://github.com/aio-libs/aiohttp/pull/1736>_)json to ClientSession.request() method (#1726 <https://github.com/aio-libs/aiohttp/pull/1726>_)raise_for_status parameter, automatically calls
raise_for_status() on any request. (#1724 <https://github.com/aio-libs/aiohttp/pull/1724>_)response.json() raises ClientResponseError exception if response's
content type does not match (#1723 <https://github.com/aio-libs/aiohttp/pull/1723>_)
loop parameter for Application's constructor#1710 <https://github.com/aio-libs/aiohttp/pull/1710>_)ClientWebSocketResponse.get_extra_info() (#1717 <https://github.com/aio-libs/aiohttp/pull/1717>_)#1655 <https://github.com/aio-libs/aiohttp/pull/1655>_)limit parameter indicates total concurrent connections.
New limit_per_host added, indicates total connections per endpoint. (#1601 <https://github.com/aio-libs/aiohttp/pull/1601>_)raw_host for name resolution (#1685 <https://github.com/aio-libs/aiohttp/pull/1685>_)ClientResponse.url to yarl.URL instance (#1654 <https://github.com/aio-libs/aiohttp/pull/1654>_)#1133 <https://github.com/aio-libs/aiohttp/pull/1133>_)#1469 <https://github.com/aio-libs/aiohttp/pull/1469>_)allow_head=True keyword argument for add_get (#1618 <https://github.com/aio-libs/aiohttp/pull/1618>_)run_app and the Command Line Interface now support serving over
Unix domain sockets for faster inter-process communication.run_app now supports passing a preexisting socket object. This can be useful
e.g. for socket-based activated applications, when binding of a socket is
done by the parent process.#1619 <https://github.com/aio-libs/aiohttp/pull/1619>_)#1657 <https://github.com/aio-libs/aiohttp/pull/1657>_)encoding parameter for ClientSession.request() method#1108 <https://github.com/aio-libs/aiohttp/pull/1108>_)version from ClientSession.request() method#1160 <https://github.com/aio-libs/aiohttp/pull/1160>_)aiohttp.protocol.HttpPrefixParser (#1590 <https://github.com/aio-libs/aiohttp/pull/1590>_).started, .start() and
.can_start() method (#1591 <https://github.com/aio-libs/aiohttp/pull/1591>_)sub app via app.router.add_subapp() is deprecated
use app.add_subapp() instead (#1592 <https://github.com/aio-libs/aiohttp/pull/1592>_)Application.finish() and Application.register_on_finish() (#1602 <https://github.com/aio-libs/aiohttp/pull/1602>_)web.Request.GET and web.Request.POST#1593 <https://github.com/aio-libs/aiohttp/pull/1593>_)aiohttp.web.WebSocketResponse.receive_msg() (#1605 <https://github.com/aio-libs/aiohttp/pull/1605>_)ServerHttpProtocol.keep_alive_timeout attribute and
keep-alive, keep_alive_on, timeout, log constructor parameters (#1606 <https://github.com/aio-libs/aiohttp/pull/1606>_)TCPConnector's`` .resolve, .resolved_hosts, .clear_resolved_hosts()attributes andresolve constructor parameter (#1607 https://github.com/aio-libs/aiohttp/pull/1607`_)ProxyConnector (#1609 <https://github.com/aio-libs/aiohttp/pull/1609>_)#1720 <https://github.com/aio-libs/aiohttp/pull/1720>_)#1703 <https://github.com/aio-libs/aiohttp/pull/1703>_)#1691 <https://github.com/aio-libs/aiohttp/pull/1691>_)#1690 <https://github.com/aio-libs/aiohttp/pull/1690>_)ssl.CertificateError (#1685 <https://github.com/aio-libs/aiohttp/pull/1685>_)#1656 <https://github.com/aio-libs/aiohttp/pull/1656>_)#1645 <https://github.com/aio-libs/aiohttp/pull/1645>_)#1643 <https://github.com/aio-libs/aiohttp/pull/1643>_)#1636 <https://github.com/aio-libs/aiohttp/pull/1636>_)#1613 <https://github.com/aio-libs/aiohttp/pull/1613>_)#920 <https://github.com/aio-libs/aiohttp/pull/920>_)#1526 <https://github.com/aio-libs/aiohttp/pull/1526>) (#1581 <https://github.com/aio-libs/aiohttp/pull/1581>)#1587 <https://github.com/aio-libs/aiohttp/pull/1587>_)#1487 <https://github.com/aio-libs/aiohttp/pull/1487>_)#1353 <https://github.com/aio-libs/aiohttp/pull/1353>_)#1525 <https://github.com/aio-libs/aiohttp/pull/1525>_)#1535 <https://github.com/aio-libs/aiohttp/pull/1535>_)FormData fields (#916 <https://github.com/aio-libs/aiohttp/pull/916>_)#1588 <https://github.com/aio-libs/aiohttp/pull/1588>_): or @ in a route does not work (#1552 <https://github.com/aio-libs/aiohttp/pull/1552>_)receive_timeout timeout for websocket to receive complete
message. (#1325 <https://github.com/aio-libs/aiohttp/pull/1325>_)heartbeat parameter for websocket to automatically send
ping message. (#1024 <https://github.com/aio-libs/aiohttp/pull/1024>) (#777 <https://github.com/aio-libs/aiohttp/pull/777>)web.Application dependency from web.UrlDispatcher (#1510 <https://github.com/aio-libs/aiohttp/pull/1510>_)#1367 <https://github.com/aio-libs/aiohttp/pull/1367>_)#1211 <https://github.com/aio-libs/aiohttp/pull/1211>_)#1559 <https://github.com/aio-libs/aiohttp/pull/1559>_)setsockopt may raise OSError exception if socket is closed already (#1595 <https://github.com/aio-libs/aiohttp/pull/1595>_)#1565 <https://github.com/aio-libs/aiohttp/pull/1565>_)text() method (#1542 <https://github.com/aio-libs/aiohttp/pull/1542>_)http.cookies for python3.4.2 (#1566 <https://github.com/aio-libs/aiohttp/pull/1566>_)#1314 <https://github.com/aio-libs/aiohttp/pull/1314>_)#754 <https://github.com/aio-libs/aiohttp/pull/754>_)#609 <https://github.com/aio-libs/aiohttp/pull/609>_)#1568 <https://github.com/aio-libs/aiohttp/pull/1568>_)RuntimeError is websocket connection is closed.aiohttp.protocol.HttpPrefixParser
will be removed in 1.4 (#1590 <https://github.com/aio-libs/aiohttp/pull/1590>_).started, .start() and
.can_start() method will be removed in 1.4 (#1591 <https://github.com/aio-libs/aiohttp/pull/1591>_)sub app via app.router.add_subapp() is deprecated
use app.add_subapp() instead, will be removed in 1.4 (#1592 <https://github.com/aio-libs/aiohttp/pull/1592>_)#1593 <https://github.com/aio-libs/aiohttp/pull/1593>_)Application.finish() and Application.register_on_finish()
will be removed in 1.4 (#1602 <https://github.com/aio-libs/aiohttp/pull/1602>_)BaseRequest from web.Request, introduce web.Server
(former RequestHandlerFactory), introduce new low-level web server
which is not coupled with web.Application and routing (#1362 <https://github.com/aio-libs/aiohttp/pull/1362>_)TestServer.make_url compatible with yarl.URL (#1389 <https://github.com/aio-libs/aiohttp/pull/1389>_)#1382 <https://github.com/aio-libs/aiohttp/pull/1382>_)#1410 <https://github.com/aio-libs/aiohttp/pull/1410>_)TestClient.app property, use TestClient.server.app instead
(BACKWARD INCOMPATIBLE)TestClient.handler property, use TestClient.server.handler instead
(BACKWARD INCOMPATIBLE)TestClient.server property returns a test server instance, was
asyncio.AbstractServer (BACKWARD INCOMPATIBLE)Gunicorn[UVLoop]WebWorker (#1201 <https://github.com/aio-libs/aiohttp/pull/1201>_)Gunicorn[UVLoop]WebWorker (#1202 <https://github.com/aio-libs/aiohttp/pull/1202>_)#1218 <https://github.com/aio-libs/aiohttp/pull/1218>_)#1413 <https://github.com/aio-libs/aiohttp/pull/1413>_)#1444 <https://github.com/aio-libs/aiohttp/pull/1444>_)#1453 <https://github.com/aio-libs/aiohttp/pull/1453>_)#1426 <https://github.com/aio-libs/aiohttp/pull/1426>_)Content-Length header in web.Response if no body
was set (#1400 <https://github.com/aio-libs/aiohttp/pull/1400>_)router.post_init() for solving (#1373 <https://github.com/aio-libs/aiohttp/pull/1373>_)TimeServive.stop()#1460 <https://github.com/aio-libs/aiohttp/pull/1460>_)#1468 <https://github.com/aio-libs/aiohttp/pull/1468>_)RuntimeError when trying to change the status of the HTTP response
after the headers have been sent (#1480 <https://github.com/aio-libs/aiohttp/pull/1480>_)#1340 <https://github.com/aio-libs/aiohttp/pull/1340>_)#1484 <https://github.com/aio-libs/aiohttp/pull/1484>_)BodyPartReader.read_chunk bug about returns zero bytes before
EOF (#1428 <https://github.com/aio-libs/aiohttp/pull/1428>_)#1401 <https://github.com/aio-libs/aiohttp/pull/1401>_)TestServer.make_url compatible with yarl.URL (#1389 <https://github.com/aio-libs/aiohttp/pull/1389>_)#1396 <https://github.com/aio-libs/aiohttp/pull/1396>_)#1379 <https://github.com/aio-libs/aiohttp/pull/1379>_)#1379 <https://github.com/aio-libs/aiohttp/pull/1379>_)#1375 <https://github.com/aio-libs/aiohttp/pull/1375>_)FrozenList#1377 <https://github.com/aio-libs/aiohttp/pull/1377>_)#1120 <https://github.com/aio-libs/aiohttp/pull/1120>_)Drop deprecated WSClientDisconnectedError (BACKWARD INCOMPATIBLE)
Use yarl.URL in client API. The change is 99% backward compatible
but ClientResponse.url is an yarl.URL instance now. (#1217 <https://github.com/aio-libs/aiohttp/pull/1217>_)
Close idle keep-alive connections on shutdown (#1222 <https://github.com/aio-libs/aiohttp/pull/1222>_)
Modify regex in AccessLogger to accept underscore and numbers (#1225 <https://github.com/aio-libs/aiohttp/pull/1225>_)
Use yarl.URL in web server API. web.Request.rel_url and web.Request.url are added. URLs and templates are
percent-encoded now. (#1224 <https://github.com/aio-libs/aiohttp/pull/1224>_)
Accept yarl.URL by server redirections (#1278 <https://github.com/aio-libs/aiohttp/pull/1278>_)
Return yarl.URL by .make_url() testing utility (#1279 <https://github.com/aio-libs/aiohttp/pull/1279>_)
Properly format IPv6 addresses by aiohttp.web.run_app (#1139 <https://github.com/aio-libs/aiohttp/pull/1139>_)
Use yarl.URL by server API (#1288 <https://github.com/aio-libs/aiohttp/pull/1288>_)
resource.url_for(), deprecate resource.url().StaticResource.SystemRoute from AbstractRouteRoute, PlainRoute, DynamicRoute,
StaticRoute, ResourceAdapter.Revert resp.url back to str, introduce resp.url_obj (#1292 <https://github.com/aio-libs/aiohttp/pull/1292>_)
Raise ValueError if BasicAuth login has a ":" character (#1307 <https://github.com/aio-libs/aiohttp/pull/1307>_)
Fix bug when ClientRequest send payload file with opened as
open('filename', 'r+b') (#1306 <https://github.com/aio-libs/aiohttp/pull/1306>_)
Enhancement to AccessLogger (pass extra dict) (#1303 <https://github.com/aio-libs/aiohttp/pull/1303>_)
Show more verbose message on import errors (#1319 <https://github.com/aio-libs/aiohttp/pull/1319>_)
Added save and load functionality for CookieJar (#1219 <https://github.com/aio-libs/aiohttp/pull/1219>_)
Added option on StaticRoute to follow symlinks (#1299 <https://github.com/aio-libs/aiohttp/pull/1299>_)
Force encoding of application/json content type to utf-8 (#1339 <https://github.com/aio-libs/aiohttp/pull/1339>_)
Fix invalid invocations of errors.LineTooLong (#1335 <https://github.com/aio-libs/aiohttp/pull/1335>_)
Websockets: Stop async for iteration when connection is closed (#1144 <https://github.com/aio-libs/aiohttp/pull/1144>_)
Ensure TestClient HTTP methods return a context manager (#1318 <https://github.com/aio-libs/aiohttp/pull/1318>_)
Raise ClientDisconnectedError to FlowControlStreamReader read function
if ClientSession object is closed by client when reading data. (#1323 <https://github.com/aio-libs/aiohttp/pull/1323>_)
Document deployment without Gunicorn (#1120 <https://github.com/aio-libs/aiohttp/pull/1120>_)
Add deprecation warning for MD5 and SHA1 digests when used for fingerprint
of site certs in TCPConnector. (#1186 <https://github.com/aio-libs/aiohttp/pull/1186>_)
Implement sub-applications (#1301 <https://github.com/aio-libs/aiohttp/pull/1301>_)
Don't inherit web.Request from dict but implement
MutableMapping protocol.
Implement frozen signals
Don't inherit web.Application from dict but implement
MutableMapping protocol.
Support freezing for web applications
Accept access_log parameter in web.run_app, use None to disable logging
Don't flap tcp_cork and tcp_nodelay in regular request handling.
tcp_nodelay is still enabled by default.
Improve performance of web server by removing premature computing of
Content-Type if the value was set by web.Response constructor.
While the patch boosts speed of trivial web.Response(text='OK', content_type='text/plain) very well please don't expect significant
boost of your application -- a couple DB requests and business logic
is still the main bottleneck.
Boost performance by adding a custom time service (#1350 <https://github.com/aio-libs/aiohttp/pull/1350>_)
Extend ClientResponse with content_type and charset
properties like in web.Request. (#1349 <https://github.com/aio-libs/aiohttp/pull/1349>_)
Disable aiodns by default (#559 <https://github.com/aio-libs/aiohttp/pull/559>_)
Don't flap tcp_cork in client code, use TCP_NODELAY mode by default.
Implement web.Request.clone() (#1361 <https://github.com/aio-libs/aiohttp/pull/1361>_)
#1297 <https://github.com/aio-libs/aiohttp/pull/1297>)#1206 <https://github.com/aio-libs/aiohttp/pull/1206>_)#1188 <https://github.com/aio-libs/aiohttp/pull/1188>_)WSMsgType to web_ws.__all__, see (#1200 <https://github.com/aio-libs/aiohttp/pull/1200>_)CookieJar ctor when called with loop=None (#1203 <https://github.com/aio-libs/aiohttp/pull/1203>_)#1197 <https://github.com/aio-libs/aiohttp/pull/1197>_)aiohttp.web.MsgType alias for aiohttp.WSMsgType for sake
of backward compatibility (#1178 <https://github.com/aio-libs/aiohttp/pull/1178>_)text/html content type for displaying index pages by static
file handler.AssertionError in static file handling (#1177 <https://github.com/aio-libs/aiohttp/pull/1177>_)%O and %b for static file handlingdebug setting of GunicornWorker, use app.debug
to control its debug-mode instead#977 <https://github.com/aio-libs/aiohttp/pull/977>_)#994 <https://github.com/aio-libs/aiohttp/pull/994>_)WebSocketResponse.wait_closed method (BACKWARD
INCOMPATIBLE)force parameter for ClientResponse.close
method (BACKWARD INCOMPATIBLE)#997 <https://github.com/aio-libs/aiohttp/pull/997>_)proxy and proxy_auth params to client.get() and family,
deprecate ProxyConnector (#998 <https://github.com/aio-libs/aiohttp/pull/998>_)#984 <https://github.com/aio-libs/aiohttp/pull/984>_)app.router.add_get(), app.router.add_post() etc. instead of
app.router.add_route() (#986 <https://github.com/aio-libs/aiohttp/pull/986>_)#1003 <https://github.com/aio-libs/aiohttp/pull/1003>_)#1015 <https://github.com/aio-libs/aiohttp/pull/1015>_){FOO}e logger format is case-sensitive nowaiohttp.MsgType to aiohttp.WSMsgTypeaiohttp.WSMessage officially#1028 <https://github.com/aio-libs/aiohttp/pull/1028>_)#1037 <https://github.com/aio-libs/aiohttp/pull/1037>_)loop.is_close()
should be present)#1072 <https://github.com/aio-libs/aiohttp/pull/1072>_)#1073 <https://github.com/aio-libs/aiohttp/pull/1073>_)#1082 <https://github.com/aio-libs/aiohttp/pull/1082>_)#1083 <https://github.com/aio-libs/aiohttp/pull/1083>_)#1060 <https://github.com/aio-libs/aiohttp/pull/1060>_)#921 <https://github.com/aio-libs/aiohttp/pull/921>_)web.Application.on_startup() signal handler (#1103 <https://github.com/aio-libs/aiohttp/pull/1103>_)#1111 <https://github.com/aio-libs/aiohttp/pull/1111>_)Application.startup in GunicornWebWorker (#1105 <https://github.com/aio-libs/aiohttp/pull/1105>_)#1044 <https://github.com/aio-libs/aiohttp/pull/1044>_)#1025 <https://github.com/aio-libs/aiohttp/pull/1025>_)#1016 <https://github.com/aio-libs/aiohttp/pull/1016>_)GunicornWebWorker (#1117 <https://github.com/aio-libs/aiohttp/pull/1117>_)#1124 <https://github.com/aio-libs/aiohttp/pull/1124>_)Application(debug=True) instead (#1121 <https://github.com/aio-libs/aiohttp/pull/1121>_)#846 <https://github.com/aio-libs/aiohttp/pull/846>_)#1136 <https://github.com/aio-libs/aiohttp/pull/1136>_)#1093 <https://github.com/aio-libs/aiohttp/pull/1093>_)#1143 <https://github.com/aio-libs/aiohttp/pull/1143>_)#1147 <https://github.com/aio-libs/aiohttp/pull/1147>_)StreamReader.read_nowait is -1 from now (#1150 <https://github.com/aio-libs/aiohttp/pull/1150>_)aiohttp.StreamReader is not inherited from asyncio.StreamReader from now
(BACKWARD INCOMPATIBLE) (#1150 <https://github.com/aio-libs/aiohttp/pull/1150>_)#1150 <https://github.com/aio-libs/aiohttp/pull/1150>_)multipart coroutine method for web Request object (#1067 <https://github.com/aio-libs/aiohttp/pull/1067>_)#1149 <https://github.com/aio-libs/aiohttp/pull/1149>_)#1140 <https://github.com/aio-libs/aiohttp/pull/1140>_)#1061 <https://github.com/aio-libs/aiohttp/pull/1061>_)Timeout class for sake of async_timeout external library.
aiohttp.Timeout is an alias for async_timeout.timeoutuse_dns_cache parameter of aiohttp.TCPConnector is True by
default (BACKWARD INCOMPATIBLE) (#1152 <https://github.com/aio-libs/aiohttp/pull/1152>_)aiohttp.TCPConnector uses asynchronous DNS resolver if available by
default (BACKWARD INCOMPATIBLE) (#1152 <https://github.com/aio-libs/aiohttp/pull/1152>_)#1174 <https://github.com/aio-libs/aiohttp/pull/1174>_)ClientSession.cookies (BACKWARD INCOMPATIBLE) (#1173 <https://github.com/aio-libs/aiohttp/pull/1173>_)AbstractCookieJar public API (BACKWARD INCOMPATIBLE) (#1173 <https://github.com/aio-libs/aiohttp/pull/1173>_)#1125 <https://github.com/aio-libs/aiohttp/pull/1125>_)#1169 <https://github.com/aio-libs/aiohttp/pull/1169>_)#1005 <https://github.com/aio-libs/aiohttp/pull/1005>_)#970 <https://github.com/aio-libs/aiohttp/pull/970>_)aiohttp.__version__#968 <https://github.com/aio-libs/aiohttp/pull/968>_)#967 <https://github.com/aio-libs/aiohttp/pull/967>_))#803 <https://github.com/aio-libs/aiohttp/pull/803>_)#797 <https://github.com/aio-libs/aiohttp/pull/797>_)#790 <https://github.com/aio-libs/aiohttp/pull/790>_)#758 <https://github.com/aio-libs/aiohttp/pull/758>_)#697 <https://github.com/aio-libs/aiohttp/pull/697>_)#817 <https://github.com/aio-libs/aiohttp/pull/817>_)#814 <https://github.com/aio-libs/aiohttp/pull/814>_)#728 <https://github.com/aio-libs/aiohttp/pull/728>_)#828 <https://github.com/aio-libs/aiohttp/pull/828>_)web.run_app (#832 <https://github.com/aio-libs/aiohttp/pull/832>_)#834 <https://github.com/aio-libs/aiohttp/pull/834>_)#835 <https://github.com/aio-libs/aiohttp/pull/835>_)aiohttp.worker.GunicornUVLoopWebWorker (#878 <https://github.com/aio-libs/aiohttp/pull/878>_)#838 <https://github.com/aio-libs/aiohttp/pull/838>_)#881 <https://github.com/aio-libs/aiohttp/pull/881>_)#744 <https://github.com/aio-libs/aiohttp/pull/744>_)#889 <https://github.com/aio-libs/aiohttp/pull/889>_)#896 <https://github.com/aio-libs/aiohttp/pull/896>_)#902 <https://github.com/aio-libs/aiohttp/pull/902>_)#875 <https://github.com/aio-libs/aiohttp/pull/875>_)#874 <https://github.com/aio-libs/aiohttp/pull/874>_)#785 <https://github.com/aio-libs/aiohttp/pull/785>_)#906 <https://github.com/aio-libs/aiohttp/pull/906>_)#891 <https://github.com/aio-libs/aiohttp/pull/891>_)#897 <https://github.com/aio-libs/aiohttp/pull/897>_)#908 <https://github.com/aio-libs/aiohttp/pull/908>_)#799 <https://github.com/aio-libs/aiohttp/pull/799>_)#909 <https://github.com/aio-libs/aiohttp/pull/909>_)#856 <https://github.com/aio-libs/aiohttp/pull/856>_)#900 <https://github.com/aio-libs/aiohttp/pull/900>_)#929 <https://github.com/aio-libs/aiohttp/pull/929>_)#847 <https://github.com/aio-libs/aiohttp/pull/847>_)#914 <https://github.com/aio-libs/aiohttp/pull/914>_)#892 <https://github.com/aio-libs/aiohttp/pull/892>_)#912 <https://github.com/aio-libs/aiohttp/pull/912>_)#901 <https://github.com/aio-libs/aiohttp/pull/901>_)request.payload property, use content instead.
(BACKWARD INCOMPATIBLE)#963 <https://github.com/aio-libs/aiohttp/pull/963>_)#964 <https://github.com/aio-libs/aiohttp/pull/964>_)#853 <https://github.com/aio-libs/aiohttp/pull/853>_)#797 <https://github.com/aio-libs/aiohttp/pull/797>_)#826 <https://github.com/aio-libs/aiohttp/pull/826>_)#782 <https://github.com/aio-libs/aiohttp/pull/782>_)#767 <https://github.com/aio-libs/aiohttp/pull/767>_)router.resources() viewIntroduce on_shutdown signal (#722 <https://github.com/aio-libs/aiohttp/pull/722>_)
Implement raw input headers (#726 <https://github.com/aio-libs/aiohttp/pull/726>_)
Implement web.run_app utility function (#734 <https://github.com/aio-libs/aiohttp/pull/734>_)
Introduce on_cleanup signal
Deprecate Application.finish() / Application.register_on_finish() in favor of on_cleanup.
Get rid of bare aiohttp.request(), aiohttp.get() and family in docs (#729 <https://github.com/aio-libs/aiohttp/pull/729>_)
Deprecate bare aiohttp.request(), aiohttp.get() and family (#729 <https://github.com/aio-libs/aiohttp/pull/729>_)
Refactor keep-alive support (#737 <https://github.com/aio-libs/aiohttp/pull/737>_)
Enable keepalive for HTTP 1.0 by default
Disable it for HTTP 0.9 (who cares about 0.9, BTW?)
For keepalived connections
Connection: keep-alive for HTTP 1.0 onlyConnection header for HTTP 1.1For non-keepalived connections
Connection: close for HTTP 1.1 onlyConnection header for HTTP 1.0Add version parameter to ClientSession constructor,
deprecate it for session.request() and family (#736 <https://github.com/aio-libs/aiohttp/pull/736>_)
Enable access log by default (#735 <https://github.com/aio-libs/aiohttp/pull/735>_)
Deprecate app.router.register_route() (the method was not documented intentionally BTW).
Deprecate app.router.named_routes() in favor of app.router.named_resources()
route.add_static accepts pathlib.Path now (#743 <https://github.com/aio-libs/aiohttp/pull/743>_)
Add command line support: $ python -m aiohttp.web package.main (#740 <https://github.com/aio-libs/aiohttp/pull/740>_)
FAQ section was added to docs. Enjoy and fill free to contribute new topics
Add async context manager support to ClientSession
Document ClientResponse's host, method, url properties
Use CORK/NODELAY in client API (#748 <https://github.com/aio-libs/aiohttp/pull/748>_)
ClientSession.close and Connector.close are coroutines now
Close client connection on exception in ClientResponse.release()
Allow to read multipart parts without content-length specified (#750 <https://github.com/aio-libs/aiohttp/pull/750>_)
Add support for unix domain sockets to gunicorn worker (#470 <https://github.com/aio-libs/aiohttp/pull/470>_)
Add test for default Expect handler (#601 <https://github.com/aio-libs/aiohttp/pull/601>_)
Add the first demo project
Rename loader keyword argument in web.Request.json method. (#646 <https://github.com/aio-libs/aiohttp/pull/646>_)
Add local socket binding for TCPConnector (#678 <https://github.com/aio-libs/aiohttp/pull/678>_)
await for a class based view (#717 <https://github.com/aio-libs/aiohttp/pull/717>_)#718 <https://github.com/aio-libs/aiohttp/pull/718>_)#723 <https://github.com/aio-libs/aiohttp/pull/723>_----)
#700 <https://github.com/aio-libs/aiohttp/pull/700>_)#644 <https://github.com/aio-libs/aiohttp/pull/644>_)#649 <https://github.com/aio-libs/aiohttp/pull/649>_)#617 <https://github.com/aio-libs/aiohttp/pull/617>_)#654 <https://github.com/aio-libs/aiohttp/pull/654>_)#663 <https://github.com/aio-libs/aiohttp/pull/663>_)#669 <https://github.com/aio-libs/aiohttp/pull/669>_)#680 <https://github.com/aio-libs/aiohttp/pull/680>_)#687 <https://github.com/aio-libs/aiohttp/pull/687>_)#613 <https://github.com/aio-libs/aiohttp/pull/613>_)#702 <https://github.com/aio-libs/aiohttp/pull/702>_)#703 <https://github.com/aio-libs/aiohttp/pull/703>_)#684 <https://github.com/aio-libs/aiohttp/pull/684>_)#709 <https://github.com/aio-libs/aiohttp/pull/709>_)parse_remote_addr() (#708 <https://github.com/aio-libs/aiohttp/pull/708>_)#707 <https://github.com/aio-libs/aiohttp/pull/707>_)#706 <https://github.com/aio-libs/aiohttp/pull/706>_)#710 <https://github.com/aio-libs/aiohttp/pull/710>_)#579 <https://github.com/aio-libs/aiohttp/pull/579>_)max_requests settings in gunicorn worker#573 <https://github.com/aio-libs/aiohttp/pull/573>_)#572 <https://github.com/aio-libs/aiohttp/pull/572>_)#586 <https://github.com/aio-libs/aiohttp/pull/586>_)async for implementation to server websocket (#543 <https://github.com/aio-libs/aiohttp/pull/543>_)async for implementation to client websocketasync with implementation to client websocket#593 <https://github.com/aio-libs/aiohttp/pull/593>_)#602 <https://github.com/aio-libs/aiohttp/pull/602>_)#607 <https://github.com/aio-libs/aiohttp/pull/607>_)#592 <https://github.com/aio-libs/aiohttp/pull/592>_)#581 <https://github.com/aio-libs/aiohttp/pull/581>_)#614 <https://github.com/aio-libs/aiohttp/pull/614>_)#621 <https://github.com/aio-libs/aiohttp/pull/621>_)#622 <https://github.com/aio-libs/aiohttp/pull/622>_)#629 <https://github.com/aio-libs/aiohttp/pull/629>_)#641 <https://github.com/aio-libs/aiohttp/pull/641>_)#640 <https://github.com/aio-libs/aiohttp/pull/640>_)#611 <https://github.com/aio-libs/aiohttp/pull/611>_)#590 <https://github.com/aio-libs/aiohttp/pull/590>)#583 <https://github.com/aio-libs/aiohttp/pull/583>_)Use errors.HttpProcessingError.message as HTTP error reason and
message (#459 <https://github.com/aio-libs/aiohttp/pull/459>_)
Optimize cythonized multidict a bit
Change repr's of multidicts and multidict views
default headers in ClientSession are now case-insensitive
Make '=' char and 'wss://' schema safe in urls (#477 <https://github.com/aio-libs/aiohttp/pull/477>_)
ClientResponse.close() forces connection closing by default from now (#479 <https://github.com/aio-libs/aiohttp/pull/479>_)
N.B. Backward incompatible change: was .close(force=False) Using forceparameter for the method is deprecated: use.release()`
instead.
Properly requote URL's path (#480 <https://github.com/aio-libs/aiohttp/pull/480>_)
add skip_auto_headers parameter for client API (#486 <https://github.com/aio-libs/aiohttp/pull/486>_)
Properly parse URL path in aiohttp.web.Request (#489 <https://github.com/aio-libs/aiohttp/pull/489>_)
Raise RuntimeError when chunked enabled and HTTP is 1.0 (#488 <https://github.com/aio-libs/aiohttp/pull/488>_)
Fix a bug with processing io.BytesIO as data parameter for client API (#500 <https://github.com/aio-libs/aiohttp/pull/500>_)
Skip auto-generation of Content-Type header (#507 <https://github.com/aio-libs/aiohttp/pull/507>_)
Use sendfile facility for static file handling (#503 <https://github.com/aio-libs/aiohttp/pull/503>_)
Default response_factory in app.router.add_static now is
StreamResponse, not None. The functionality is not changed if
default is not specified.
Drop ClientResponse.message attribute, it was always implementation detail.
Streams are optimized for speed and mostly memory in case of a big
HTTP message sizes (#496 <https://github.com/aio-libs/aiohttp/pull/496>_)
Fix a bug for server-side cookies for dropping cookie and setting it again without Max-Age parameter.
Don't trim redirect URL in client API (#499 <https://github.com/aio-libs/aiohttp/pull/499>_)
Extend precision of access log "D" to milliseconds (#527 <https://github.com/aio-libs/aiohttp/pull/527>_)
Deprecate StreamResponse.start() method in favor of
StreamResponse.prepare() coroutine (#525 <https://github.com/aio-libs/aiohttp/pull/525>_)
.start() is still supported but responses begun with .start()
does not call signal for response preparing to be sent.
Add StreamReader.__repr__
Drop Python 3.3 support, from now minimal required version is Python
3.4.1 (#541 <https://github.com/aio-libs/aiohttp/pull/541>_)
Add async with support for ClientSession.request() and family (#536 <https://github.com/aio-libs/aiohttp/pull/536>_)
Ignore message body on 204 and 304 responses (#505 <https://github.com/aio-libs/aiohttp/pull/505>_)
TCPConnector processed both IPv4 and IPv6 by default (#559 <https://github.com/aio-libs/aiohttp/pull/559>_)
Add .routes() view for urldispatcher (#519 <https://github.com/aio-libs/aiohttp/pull/519>_)
Route name should be a valid identifier name from now (#567 <https://github.com/aio-libs/aiohttp/pull/567>_)
Implement server signals (#562 <https://github.com/aio-libs/aiohttp/pull/562>_)
Drop a year-old deprecated files parameter from client API.
Added async for support for aiohttp stream (#542 <https://github.com/aio-libs/aiohttp/pull/542>_)
#489 <https://github.com/aio-libs/aiohttp/pull/489>_)#450 <https://github.com/aio-libs/aiohttp/pull/450>_)#472 <https://github.com/aio-libs/aiohttp/pull/472>_)#473 <https://github.com/aio-libs/aiohttp/pull/473>_)data argument forward (#462 <https://github.com/aio-libs/aiohttp/pull/462>_)#463 <https://github.com/aio-libs/aiohttp/pull/463>_)#386 <https://github.com/aio-libs/aiohttp/pull/386>_)#395 <https://github.com/aio-libs/aiohttp/pull/395>_)s content-length header is cleared now after redirect from POST method (#391 https://github.com/aio-libs/aiohttp/pull/391`_)#405 <https://github.com/aio-libs/aiohttp/pull/405>_)#406 <https://github.com/aio-libs/aiohttp/pull/406>_)#403 <https://github.com/aio-libs/aiohttp/pull/403>_)#415 <https://github.com/aio-libs/aiohttp/pull/415>_)#414 <https://github.com/aio-libs/aiohttp/pull/414>)
Backward-compatibility warning: this may change the url matched by
your queries if they send quoted character (like %2F for /) (#414 <https://github.com/aio-libs/aiohttp/pull/414>)#418 <https://github.com/aio-libs/aiohttp/pull/418>_)#425 <https://github.com/aio-libs/aiohttp/pull/425>_)#421 <https://github.com/aio-libs/aiohttp/pull/421>_)#433 <https://github.com/aio-libs/aiohttp/pull/433>_)#442 <https://github.com/aio-libs/aiohttp/pull/442>_)#453 <https://github.com/aio-libs/aiohttp/pull/453>_)#456 <https://github.com/aio-libs/aiohttp/pull/456>_)#454 <https://github.com/aio-libs/aiohttp/pull/454>_)#438 <https://github.com/aio-libs/aiohttp/pull/438>_)#410 <https://github.com/aio-libs/aiohttp/pull/410>)__repr__ (cythonized
versions) (#410 <https://github.com/aio-libs/aiohttp/pull/410>_)#380 <https://github.com/aio-libs/aiohttp/pull/380>_)__del__ usage: it's actually
3.4.1 instead of 3.4.0#378 <https://github.com/aio-libs/aiohttp/pull/378>_)#377 <https://github.com/aio-libs/aiohttp/pull/377>_)#363 <https://github.com/aio-libs/aiohttp/pull/363>_)#372 <https://github.com/aio-libs/aiohttp/pull/372>_)fingerprint param of TCPConnector to enable verifying
SSL certificates via MD5, SHA1, or SHA256 digest (#366 <https://github.com/aio-libs/aiohttp/pull/366>_)#349 <https://github.com/aio-libs/aiohttp/pull/349>_)ClientSession.close() methodconnector.closed readonly propertyClientSession.closed readonly propertyClientSession.connector readonly propertyClientSession.detach method__del__ to client-side objects: sessions, connectors,
connections, requests, responses.#357 <https://github.com/aio-libs/aiohttp/pull/357>_)limit parameter to connector constructor (#358 <https://github.com/aio-libs/aiohttp/pull/358>_)request.has_body property (#364 <https://github.com/aio-libs/aiohttp/pull/364>_)response_class parameter to ws_connect() (#367 <https://github.com/aio-libs/aiohttp/pull/367>_)ProxyConnector does not support keep-alive requests by default
starting from now (#368 <https://github.com/aio-libs/aiohttp/pull/368>_)connector.force_close property#374 <https://github.com/aio-libs/aiohttp/pull/374>_)chunk_size parameter in router.add_static()Expect header handling for not found and not allowed routes (#340 <https://github.com/aio-libs/aiohttp/pull/340>_)*#316 <https://github.com/aio-libs/aiohttp/pull/316>_)#318 <https://github.com/aio-libs/aiohttp/pull/318>_)#325 <https://github.com/aio-libs/aiohttp/pull/325>_)#327 <https://github.com/aio-libs/aiohttp/pull/327>_)#328 <https://github.com/aio-libs/aiohttp/pull/328>_)keep_alive_on argument for HTTP server handler.timeout parameter to WebSocketResponse ctorWebSocketResponse.close_code attribute#273 <https://github.com/aio-libs/aiohttp/pull/273>_)#287 <https://github.com/aio-libs/aiohttp/pull/287>) (#267 <https://github.com/aio-libs/aiohttp/pull/267>)#184 <https://github.com/aio-libs/aiohttp/pull/184>_)#266 <https://github.com/aio-libs/aiohttp/pull/266>_)#217 <https://github.com/aio-libs/aiohttp/pull/217>_)#264 <https://github.com/aio-libs/aiohttp/pull/264>_)#261 <https://github.com/aio-libs/aiohttp/pull/261>_)#253 <https://github.com/aio-libs/aiohttp/pull/253>_)#255 <https://github.com/aio-libs/aiohttp/pull/255>_)#250 <https://github.com/aio-libs/aiohttp/pull/250>_)#216 <https://github.com/aio-libs/aiohttp/pull/216>)aiohttp.web.WebSocketResponsegetall parameter anymore, it
returns the full body anyway.list, not tuple.MultiDict, CIMultiDict) and two immutable multidict proxies
(MultiDictProxy and CIMultiDictProxy). Previous edition of
multidicts was not a part of public API BTW.ConnectionError to aiohttp.DisconnectedError and don't
eat ConnectionError exceptions from web handlers.deflate encoding.**kwargs anymore ((#243 <https://github.com/aio-libs/aiohttp/pull/243>_)).#242 <https://github.com/aio-libs/aiohttp/pull/242>_)).aiohttp.web.StreamResponse.started property (#213 <https://github.com/aio-libs/aiohttp/pull/213>_)ServerHttpProtocol.handle_erroraiohttp.web.RequestHandler.handle_request
on error ((#218 <https://github.com/aio-libs/aiohttp/pull/218>_))StreamResponse.charset converts value to lower-case on assigning.ClientRequestError.#204 <https://github.com/aio-libs/aiohttp/pull/204>_)utf-8 encoding, some servers send headers
in utf-8 encoding (#207 <https://github.com/aio-libs/aiohttp/pull/207>_)aiohtt.web middlewares (#209 <https://github.com/aio-libs/aiohttp/pull/209>_)#206 <https://github.com/aio-libs/aiohttp/pull/206>_)aiohttp.web in backward-incompatible manner.
Sorry, we have to do this.UrlDispatcher.add_route() (#186 <https://github.com/aio-libs/aiohttp/pull/186>_)Request.POST() function to Request.post()aiohttp.web.RequestRequestHandle.handle_request()aiohttp.webaiohttp.webAsyncGunicornWorkeraiohttp.web.UrlDispatcher (#179 <https://github.com/aio-libs/aiohttp/pull/179>_)#181 <https://github.com/aio-libs/aiohttp/pull/181>_)environ['PATH_INFO'] in wsgi.py (#177 <https://github.com/aio-libs/aiohttp/pull/177>_)404: NotFound__iter__, the method should iterate over keys, not
(key, value) pairs.#173 <https://github.com/aio-libs/aiohttp/pull/173>_)#172 <https://github.com/aio-libs/aiohttp/pull/172>_)#170 <https://github.com/aio-libs/aiohttp/pull/170>_)#157 <https://github.com/aio-libs/aiohttp/pull/157>_)#153 <https://github.com/aio-libs/aiohttp/pull/153>_)#150 <https://github.com/aio-libs/aiohttp/pull/150>_)#114 <https://github.com/aio-libs/aiohttp/pull/114>_).#118 <https://github.com/aio-libs/aiohttp/pull/118>_).#137 <https://github.com/aio-libs/aiohttp/pull/137>_)#128 <https://github.com/aio-libs/aiohttp/pull/128>_).#131 <https://github.com/aio-libs/aiohttp/pull/131>_).#112 <https://github.com/aio-libs/aiohttp/pull/112>_).#97 <https://github.com/aio-libs/aiohttp/pull/97>_).#20 <https://github.com/aio-libs/aiohttp/pull/20>_).#87 <https://github.com/aio-libs/aiohttp/pull/87>_).__del__ methods#14 <https://github.com/aio-libs/aiohttp/pull/14>_)HttpResponse.wait_for_close()expect: 100-continue header.