Bug fixes
-
Raise :exc:
aiohttp.ServerFingerprintMismatch
exception on client-side if request through http proxy with mismatching server fingerprint digest:aiohttp.ClientSession(headers=headers, connector=TCPConnector(ssl=aiohttp.Fingerprint(mismatch_digest), trust_env=True).request(...)
-- by :user:gangj
.Related issues and pull requests on GitHub:
#6652. -
Modified websocket :meth:
aiohttp.ClientWebSocketResponse.receive_str
, :py:meth:aiohttp.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:
#6800. -
Made
TestClient.app
aGeneric
so type checkers will know the correct type (avoiding unneededclient.app is not None
checks) -- by :user:Dreamsorcerer
.Related issues and pull requests on GitHub:
#8977. -
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:
#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:
#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.
-
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:
#9672. -
Fixed the WebSocket flow control calculation undercounting with multi-byte data -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#9686.
Features
-
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:
#6257. -
Added
server_hostname
parameter tows_connect
.Related issues and pull requests on GitHub:
#7941. -
Exported :py:class:
~aiohttp.ClientWSTimeout
to top-level namespace -- by :user:Dreamsorcerer
.Related issues and pull requests on GitHub:
#8612. -
Added
secure
/httponly
/samesite
parameters to.del_cookie()
-- by :user:Dreamsorcerer
.Related issues and pull requests on GitHub:
#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
-
Added
proxy
andproxy_auth
parameters to :py:class:~aiohttp.ClientSession
-- by :user:meshya
.Related issues and pull requests on GitHub:
#9207. -
Added
default_to_multipart
parameter toFormData
.Related issues and pull requests on GitHub:
#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:
#9348. -
Updated :py:class:
~aiohttp.ClientSession
to support paths inbase_url
parameter.
base_url
paths must end with a/
-- by :user:Cycloctane
.Related issues and pull requests on GitHub:
#9530. -
Improved performance of reading WebSocket messages with a Cython implementation -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#9543, #9554, #9556, #9558, #9636, #9649. -
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:
#9572.
Deprecations (removal in next major release)
-
Deprecate obsolete
timeout: float
andreceive_timeout: Optional[float]
in :py:meth:~aiohttp.ClientSession.ws_connect
. Change default websocket receive timeout fromNone
to10.0
.Related issues and pull requests on GitHub:
#3945.
Removals and backward incompatible breaking changes
-
Dropped support for Python 3.8 -- by :user:
Dreamsorcerer
.Related issues and pull requests on GitHub:
#8797. -
Increased minimum yarl version to 1.17.0 -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#8909, #9079, #9305, #9574. -
Removed the
is_ipv6_address
andis_ip4_address
helpers are they are no longer used -- by :user:bdraco
.Related issues and pull requests on GitHub:
#9344. -
Changed
ClientRequest.connection_key
to be aNamedTuple
to improve client performance -- by :user:bdraco
.Related issues and pull requests on GitHub:
#9365. -
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, theceil_timeout
must be added.Related issues and pull requests on GitHub:
#9600. -
Changed
ClientRequest.request_info
to be aNamedTuple
to improve client performance -- by :user:bdraco
.Related issues and pull requests on GitHub:
#9692.
Packaging updates and notes for downstreams
-
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:
#9394. -
Separated
aiohttp.http_websocket
into multiple files to make it easier to maintain -- by :user:bdraco
.
Contributor-facing changes
-
Changed diagram images generator from
blockdiag
toGraphViz
.
Generating documentation now requires the GraphViz executable to be included in $PATH or sphinx build configuration.Related issues and pull requests on GitHub:
#9359.
Miscellaneous internal changes
-
Added flake8 settings to avoid some forms of implicit concatenation. -- by :user:
booniepepper
.Related issues and pull requests on GitHub:
#7731. -
Enabled keep-alive support on proxies (which was originally disabled several years ago) -- by :user:
Dreamsorcerer
.Related issues and pull requests on GitHub:
#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:
#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:
#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:
#9285. -
Reduced memory required for stream objects created during the client request lifecycle -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#9407. -
Improved performance of the client request lifecycle when there are no cookies -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#9470. -
Improved performance of sending client requests when the writer can finish synchronously -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#9485. -
Improved performance of serializing HTTP headers -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#9603. -
Improved performance of the internal
DataQueue
-- by :user:bdraco
.Related issues and pull requests on GitHub:
#9659. -
Improved performance of calling
receive
for WebSockets for the most common message types -- by :user:bdraco
.Related issues and pull requests on GitHub:
#9679. -
Replace internal helper methods
method_must_be_empty_body
andstatus_code_must_be_empty_body
with simpleset
lookups -- by :user:bdraco
.Related issues and pull requests on GitHub:
#9722. -
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
. -
Improved performance of :py:class:
aiohttp.BaseConnector
when there is nolimit_per_host
-- by :user:bdraco
.Related issues and pull requests on GitHub:
#9756. -
Improved performance of sending HTTP requests when there is no body -- by :user:
bdraco
.Related issues and pull requests on GitHub:
#9757.