NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #49 most downloaded on PyPI
Async http client/server framework (asyncio)
Last release 2 months ago
23 Jul 2026
Release timing varies
gaps range from 8 days to 3 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
7 versions withdrawn
withdrawn after publishing
13 years old
312 releases · first in 2013
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix stream .read() / .readany() / .iter_any() which used to return a partial content only in case of compressed content #3525 _
.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>_Fix type stubs for aiohttp.web.run_app(access_log=True) and fix edge case of access_log=True and the event loop being in debug mode. #3504 _
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>_Replace collections.MutableMapping with collections.abc.MutableMapping to avoid a deprecation warning. #3480 _
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>_Preserve MultipartWriter parts headers on write.
Refactor the way how 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>_
Log suppressed exceptions in GunicornWebWorker.
#3464 <https://github.com/aio-libs/aiohttp/issues/3464>_
Remove wildcard imports.
#3468 <https://github.com/aio-libs/aiohttp/issues/3468>_
Use the same task for app initialization and web server handling in gunicorn workers.
It allows to use Python3.7 context vars smoothly.
#3471 <https://github.com/aio-libs/aiohttp/issues/3471>_
Fix handling of chunked+gzipped response when first chunk does not give uncompressed data
#3477 <https://github.com/aio-libs/aiohttp/issues/3477>_
Replace 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>_
Ignore done tasks when cancels pending activities on 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>_Fix a regression about ClientSession._requote_redirect_url modification in debug mode.
ClientSession._requote_redirect_url modification in debug
mode.…4.X lines is: 4.X will remove some functionality deprecated in 3.5. Please make sure that your code doesn't emit any warning with aiohttp 3.5 to reduc…
It is the latest feature release in 3.5 line. Next big release will be 4.0 (while 3.5.X bugfix releases are possible).
The main new feature is full mypy compliance in strict mode (no unspecialized generic, no untyped definitions etc.) The next very important thing that users need to know on the road of transition from 3.X to 4.X lines is: 4.X will remove some functionality deprecated in 3.5. Please make sure that your code doesn't emit any warning with aiohttp 3.5 to reduce the pain of upgrading to future 4.0 (or maybe eliminate it at all).
This is the full list of aiohttp 3.5 changes:
The library type annotations are checked in strict mode now.
Add support for setting cookies for individual request (#2387 <https://github.com/aio-libs/aiohttp/pull/2387>_)
Application.add_domain implementation (#2809 <https://github.com/aio-libs/aiohttp/pull/2809>_)
The default 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>_)
Make request.url accessible when transport is closed. (#3177 <https://github.com/aio-libs/aiohttp/pull/3177>_)
Add 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>_)
Enable users to set ClientTimeout in aiohttp.request (#3213 <https://github.com/aio-libs/aiohttp/pull/3213>_)
Don't raise a warning if NETRC environment variable is not set and ~/.netrc file
doesn't exist. (#3267 <https://github.com/aio-libs/aiohttp/pull/3267>_)
Add default logging handler to web.run_app
If the Application.debug flag is set and the default logger aiohttp.access is used, access logs will now be output using a stderr StreamHandler if no handlers are attached. Furthermore, if the default logger has no log level set, the log level will be set to DEBUG. (#3324 <https://github.com/aio-libs/aiohttp/pull/3324>_)
Add method argument to 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>_)
Create a task per request handling. (#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>_)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix installation from sources when compiling toolkit is not available (#3241 _)
#3241 <https://github.com/aio-libs/aiohttp/pull/3241>_)Add app.pre_frozen state to properly handle startup signals in sub-applications. (#3237 _)
app.pre_frozen state to properly handle startup signals in sub-applications. (#3237 <https://github.com/aio-libs/aiohttp/pull/3237>_)Fix iter_chunks type annotation (#3230 _)
iter_chunks type annotation (#3230 <https://github.com/aio-libs/aiohttp/pull/3230>_)Fixed regressions for HTTP headers processing and documentation publishing
Fixed regressions for HTTP headers processing and documentation publishing
#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>_)Mention that app.make_handler is deprecated, recommend to use runners API instead. (#3157 _)
#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>_)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Many HTTP proxies has buggy keepalive support. Let's not reuse connection but close it after processing every response.
Bugfix release
Many HTTP proxies has buggy keepalive support. Let's not reuse connection but close it after processing every response. (#3070)
Provide vendor source files in tarball (#3076)
Nothing published for this version
When using a server-request body as the data= argument of a client request, iterate over the content with readany instead of readline to avoid Line to
Bugfix release.
sock_read timeout. (#3053)data= argument of a client request,
iterate over the content with readany instead of readline to avoid Line too long errors. (#3054)Deprecate custom application's router. #3021
The main change is introducing new client timeouts.
The release has many new improvements and bugfixes as well.
ConnectionResetError instead of CancelledError on trying to
write to a closed stream. #2499ClientTimeout class and support socket read timeout. #2768aiohttp.web is used as a program #2956asyncio.streams.FlowControlMixin #2986@helpers.reify, 5% boost on macro benchmark #2995runner.addresses property. #3036bytearray instead of a list of bytes in websocket reader. It
improves websocket message reading a little. #3039Nothing published for this version
Don't reuse a connection with the same URL but different proxy/TLS settings
Deprecate Application.make_handler() (#2938 _)
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>_)#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>_)Fix cancellation broadcast during DNS resolve (#2910 _)
Bugfix release
#2910 <https://github.com/aio-libs/aiohttp/pull/2910>_)Bugfix release, no new features against 3.1.0
Bugfix release, no new features against 3.1.0
LineTooLong exception more detailed about actual data size (#2863)on_chunk_sent when write_eof() takes as a param the last chunk (#2909)Support *asynchronous iterators* (and *asynchronous generators* as well) in both client and server API as request / response BODY payloads.
Deprecate ClientResponseError.code in favor of .status to keep similarity with response classes.
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)web.run_app and gunicorn
worker. (#2739)app.cleanup_ctx property). (#2747)writer.write_headers a coroutine. (#2762)app.add_routes() method. (#2787)web.static() and RouteTableDef.static() API. (#2795)asyncio.set_event_loop(). The
change affects aiohttp test utils but backward compatibility is not broken
for 99.99% of use cases. (#2804)ClientResponse constructor: make logically required constructor
arguments mandatory, drop _post_init() method. (#2820)app.add_routes() in server docs everywhere (#2830)Content-Range header for Range requests (#2844)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)ClientResponse.json() documentation to reflect that it now
allows "application/xxx+json" content-types (#2206)StreamReader as data at client
side. (#2793)Close a connection if an unexpected exception occurs while sending a request
Use asyncio.current_task() on Python 3.7
asyncio.current_task() on Python 3.7 (#2825)Fixed previously broken SSL proxies (http proxies with upgrade to HTTPS by CONNECT method).
Fixed previously broken SSL proxies (http proxies with upgrade to HTTPS by CONNECT method).
setup.py for python version. The check
works in parallel to environment marker. As effect a error about unsupported
Python versions is raised even on outdated systems with very old
setuptools version installed. (#2813)Fix SSL proxy support by client. (#2810)
Restore an imperative check in 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)
Add _reuse_address and _reuse_port to web_runner.TCPSite.__slots__.
_reuse_address and _reuse_port to
web_runner.TCPSite.__slots__. (#2792)The release is pretty important, as well as bug fixes for aiohttp 3.0.4
The release is pretty important, as well as bug fixes for aiohttp 3.0.4
Update to aiohttp 3.0.5 is highly recommended for aiohttp server code.
InvalidStateError on processing a sequence of two
RequestHandler.data_received calls on web server. (#2773)Fix IndexError in HTTP request handling by server.
IndexError in HTTP request handling by server. (#2752)Relax attrs dependency to minimal actually supported version 17.0.3 The change allows to avoid version conflicts with currently existing test tools.
attrs dependency to minimal actually supported version
17.0.3 The change allows to avoid version conflicts with currently
existing test tools.Upgrade is highly recommended for Windows users.
Upgrade is highly recommended for Windows users.
/static/D:\path and /static/\\hostname\drive\path are
forbidden.Prevent Windows absolute URLs in static files. Paths like /static/D:\path and /static/\\hostname\drive\path are forbidden.
Major release, many already deprecated things are removed Minimal supported Python version is 3.5.3. aiohttp uses shiny async/await syntax everywhere…
Major release, many already deprecated things are removed
Minimal supported Python version is 3.5.3.
aiohttp uses shiny async/await syntax everywhere internally (while old yield from is still supported).
Read https://docs.aiohttp.org/en/stable/whats_new_3_0.html for brief information about most important changes.
The full changelog is below:
PayloadWriter.write method for large request bodies. (#2126)async with test_client.ws_connect(...) (#2525)web.run_app
implementation. (#2530)aiohttp.ClientResponse.get_encoding method public with the
processing of invalid charset while detecting content encoding. (#2549)ClientWebSocketResponse and WebSocketResponse. (#2551)StreamReader to prevent flipping between paused and
resumed states too often. (#2555).netrc by trust_env (#2581)MultipartWriter.boundary is str now. (#2589)TestServer (and associated pytest
fixtures) (#2613)ssl parameter to client API (#2626)run_app and
TCPSite. (#2679)attrs library for data classes, replace namedtuple. (#2690)aiohttp_ prefix (#2578)aiohttp- prefix for pytest-aiohttp command line
parameters (#2578)aiohttp does not
support HTTP2 yet, the protocol is not upgraded but response is handled
correctly. (#2277)asyncio.CancelledError (#2499)ClientSession.__del__ by stopping to try to close it.
(#2523)access_log_format argument in web.run_app (#2649).url_for() parameters (#2668)literalinclude to link to the actual files.
(#2396)from_env to trust_env in client reference. (#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)StreamReaderPayload and DataQueuePayload. (#2257)md5 and sha1 finger-prints (#2267)yield from is gone, use async/await syntax.
(#2343)aiohttp.Timeout and use async_timeout.timeout instead. (#2348)resolve param from TCPConnector. (#2377)send_str(), send_bytes(), send_json(), ping() and pong() are
genuine async functions now. (#2475)app.on_pre_signal and app.on_post_signal. Signal
handlers should be coroutines, support for regular functions is dropped.
(#2480)StreamResponse.drain() is not a part of public API anymore, just use await StreamResponse.write(). StreamResponse.write is converted to async
function. (#2483)slow_request_timeout param and **kwargs`` from RequestHandler`. (#2500)resource.url(). (#2501)%u and %l format specifiers from access log format. (#2506)request.GET property. (#2547)ChunksQueue and FlowControlChunksQueue,
merge FlowControlStreamReader functionality into StreamReader, drop
FlowControlStreamReader name. (#2555)router.add_get(..., allow_head=True)
(#2585)encoding parameter from client API (#2606)verify_ssl, ssl_context and fingerprint parameters in
client API (#2626)resource.url_for() parameters. (#2668)ClientSession and web.Application and
custom user attributes for ClientSession, web.Request and
web.Application (#2691)resp = await aiohttp.request(...) syntax for sake of async with aiohttp.request(...) as resp:. (#2540)ClientSession and test
server/client. (#2362)P.S. Actual tag for aiohttp 3.0 is v3.0.1 because v3.0.0 had a couple minor bugs. aiohttp 3.0.1 is proven as the first stable aiohttp 3.0 version.
Add DeprecationWarning for returning HTTPException (#2415 _)
Speed up the PayloadWriter.write method for large request bodies. (#2126)
StreamResponse and Response are now MutableMappings. (#2246)
ClientSession publishes a set of signals to track the HTTP request execution. (#2313)
Content-Disposition fast access in ClientResponse (#2455)
Added support to Flask-style decorators with class-based Views. (#2472)
Signal handlers (registered callbacks) should be coroutines. (#2480)
Support async with test_client.ws_connect(...) (#2525)
Introduce site and application runner as underlying API for web.run_app implementation. (#2530)
Only quote multipart boundary when necessary and sanitize input (#2544)
Make the aiohttp.ClientResponse.get_encoding method public with the processing of invalid charset while detecting content encoding. (#2549)
Add optional configurable per message compression for ClientWebSocketResponse and WebSocketResponse. (#2551)
Add hysteresis to StreamReader to prevent flipping between paused and resumed states too often. (#2555)
Support .netrc by trust_env (#2581)
Avoid to create a new resource when adding a route with the same name and path of the last added resource (#2586)
MultipartWriter.boundary is str now. (#2589)
Allow a custom port to be used by TestServer (and associated pytest fixtures) (#2613)
Add param access_log_class to web.run_app function (#2615)
Add ssl parameter to client API (#2626)
Fixes performance issue introduced by #2577. When there are no middlewares installed by the user, no additional and useless code is executed. (#2629)
Rename PayloadWriter to StreamWriter (#2654)
New options reuse_port, reuse_address are added to run_app and TCPSite. (#2679)
Use custom classes to pass client signals parameters (#2686)
Use attrs library for data classes, replace namedtuple. (#2690)
Pytest fixtures renaming, add aiohttp_ prefix (#2578)
Add aiohttp- prefix for pytest-aiohttp command line parameters (#2578)
Correctly process upgrade request from server to HTTP2. aiohttp does not support HTTP2 yet, the protocol is not upgraded but response is handled correctly. (#2277)
Fix ClientConnectorSSLError and ClientProxyConnectionError for proxy connector (#2408)
Fix connector convert OSError to ClientConnectorError (#2423)
Fix connection attempts for multiple dns hosts (#2424)
Fix writing to closed transport by raising asyncio.CancelledError (#2499)
Fix warning in ClientSession.__del__ by stopping to try to close it. (#2523)
Fixed race-condition for iterating addresses from the DNSCache. (#2620)
Fix default value of access_log_format argument in web.run_app (#2649)
Freeze sub-application on adding to parent app (#2656)
Do percent encoding for .url_for() parameters (#2668)
Correctly process request start time and multiple request/response headers in access log extra (#2641)
Improve tutorial docs, using literalinclude to link to the actual files. (#2396)
Small improvement docs: better example for file uploads. (#2401)
Rename from_env to trust_env in client reference. (#2451)
Fixed mistype in 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)
Fix issue with unittest example not compiling in testing docs. (#2717)
Simplify HTTP pipelining implementation (#2109)
Drop StreamReaderPayload and DataQueuePayload. (#2257)
Drop md5 and sha1 finger-prints (#2267)
Drop WSMessage.tp (#2321)
Drop Python 3.4 and Python 3.5.0, 3.5.1, 3.5.2. Minimal supported Python versions are 3.5.3 and 3.6.0. yield from is gone, use async/await syntax. (#2343)
Drop aiohttp.Timeout and use async_timeout.timeout instead. (#2348)
Drop resolve param from TCPConnector. (#2377)
Add DeprecationWarning for returning HTTPException (#2415)
send_str(), send_bytes(), send_json(), ping() and pong() are genuine async functions now. (#2475)
Drop undocumented app.on_pre_signal and app.on_post_signal. Signal handlers should be coroutines, support for regular functions is dropped. (#2480)
StreamResponse.drain() is not a part of public API anymore, just use await StreamResponse.write(). StreamResponse.write is converted to async function. (#2483)
Drop deprecated slow_request_timeout param and **kwargs` from RequestHandler. (#2500)
Drop deprecated resource.url(). (#2501)
Remove %u and %l format specifiers from access log format. (#2506)
Drop deprecated request.GET property. (#2547)
Simplify stream classes: drop ChunksQueue and FlowControlChunksQueue, merge FlowControlStreamReader functionality into StreamReader, drop FlowControlStreamReader name. (#2555)
Do not create a new resource on router.add_get(..., allow_head=True) (#2585)
Drop access to TCP tuning options from PayloadWriter and Response classes (#2604)
Drop deprecated encoding parameter from client API (#2606)
Deprecate verify_ssl, ssl_context and fingerprint parameters in client API (#2626)
Get rid of the legacy class StreamWriter. (#2651)
Forbid non-strings in resource.url_for() parameters. (#2668)
Deprecate inheritance from ClientSession and web.Application and custom user attributes for ClientSession, web.Request and web.Application (#2691)
Drop resp = await aiohttp.request(...) syntax for sake of async with aiohttp.request(...) as resp:. (#2540)
Forbid synchronous context managers for ClientSession and test server/client. (#2362)
#2552
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix 100% CPU usage on HTTP GET and websocket connection just after it (#1955 _)
Fix colon handing in path for dynamic resources (#2670 _)
Fix colon handing in path for dynamic resources (#2670)
Do not use yarl.unquote internal function in aiohttp. Fix incorrectly unquoted path part in URL dispatcher (#2662 _)
Fixed race-condition for iterating addresses from the DNSCache.
Correct request.app context (for handlers not just middlewares).
request.app context (for handlers not just middlewares). (#2577)Fix compatibility with pytest 3.3+
pytest 3.3+ (#2565)Your coding agent can read these notes before it upgrades. Set up the MCP server →