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`.
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 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 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 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.
Fixed async concurrency safety in websocket compressor.
Fixed ClientResponse.close()
releasing the connection instead of closing.
Fixed a regression where connection may get closed during upgrade. -- by :user:`Dreamsorcerer`
Fixed messages being reported as upgraded without an Upgrade header in Python parser. -- by :user:`Dreamsorcerer`
Introduced AppKey
for static typing support of Application
storage.
See https://docs.aiohttp.org/en/stable/web_advanced.html#application-s-config
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
Added 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.
Added support for setting response header parameters max_line_size
and max_field_size
.
Added auto_decompress
parameter to ClientSession.request
to override ClientSession._auto_decompress
. -- by :user:`Daste745`
Changed raise_for_status
to allow a coroutine.
Added client brotli compression support (optional with runtime check).
Added client_max_size
to BaseRequest.clone()
to allow overriding the request body size. -- :user:`anesabml`.
Added a middleware type alias aiohttp.typedefs.Middleware
.
Exported HTTPMove
which can be used to catch any redirection request
that has a location -- :user:`dreamsorcerer`.
Changed the path
parameter in web.run_app()
to accept a pathlib.Path
object.
Performance: Skipped filtering CookieJar
when the jar is empty or all cookies have expired.
Performance: Only check origin if insecure scheme and there are origins to treat as secure, in CookieJar.filter_cookies()
.
Performance: Used timestamp instead of datetime
to achieve faster cookie expiration in CookieJar
.
Added support for passing a custom server name parameter to HTTPS connection.
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`.
Turned access log into no-op when the logger is disabled.
Added typing information to RawResponseMessage
. -- by :user:`Gobot1234`
Removed async-timeout
for Python 3.11+ (replaced with asyncio.timeout()
on newer releases).
Added support for brotlicffi
as an alternative to brotli
(fixing Brotli support on PyPy).
Added WebSocketResponse.get_extra_info()
to access a protocol transport's extra info.
Allow link
argument to be set to None/empty in HTTP 451 exception.
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`.
Fixed client timeout not working when incoming data is always available without waiting. -- by :user:`Dreamsorcerer`.
Fixed readuntil
to work with a delimiter of more than one character.
Added __repr__
to EmptyStreamReader
to avoid AttributeError
.
Fixed bug when using TCPConnector
with ttl_dns_cache=0
.
Fixed response returned from expect handler being thrown away. -- by :user:`Dreamsorcerer`
Avoided raising UnicodeDecodeError
in multipart and in HTTP headers parsing.
Changed sock_read
timeout to start after writing has finished, avoiding read timeouts caused by an unfinished write. -- by :user:`dtrifiro`
Fixed missing query in tracing method URLs when using yarl
1.9+.
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.
Fixed EmptyStreamReader.iter_chunks()
never ending. -- by :user:`mind1m`
Fixed a rare RuntimeError: await wasn't used with future
exception. -- by :user:`stalkerg`
Fixed issue with insufficient HTTP method and version validation.
Added check to validate that absolute URIs have schemes.
Fixed unhandled exception when Python HTTP parser encounters unpaired Unicode surrogates.
Updated parser to disallow invalid characters in header field names and stop accepting LF as a request line separator.
Fixed Python HTTP parser not treating 204/304/1xx as an empty body.
Ensure empty body response for 1xx/204/304 per RFC 9112 sec 6.3.
Fixed an issue when a client request is closed before completing a chunked payload. -- by :user:`Dreamsorcerer`
Edge Case Handling for ResponseParser for missing reason value.
Fixed ClientWebSocketResponse.close_code
being erroneously set to None
when there are concurrent async tasks receiving data and closing the connection.
Added HTTP method validation.
Fixed arbitrary sequence types being allowed to inject values via version parameter. -- by :user:`Dreamsorcerer`
Performance: Fixed increase in latency with small messages from websocket compression changes.
Fixed the ClientResponse.release's type in the doc. Changed from comethod to method.
Added information on behavior of base_url parameter in ClientSession.
Fixed ClientResponseError docs.
Updated Redis code examples to follow the latest API.
Added a note about possibly needing to update headers when using on_response_prepare
. -- by :user:`Dreamsorcerer`
Completed trust_env
parameter description to honor wss_proxy
, ws_proxy
or no_proxy
env.
Expanded SSL documentation with more examples (e.g. how to use certifi). -- by :user:`Dreamsorcerer`
Fix, update, and improve client exceptions documentation.
Added shutdown_timeout
parameter to BaseRunner
, while
deprecating shutdown_timeout
parameter from BaseSite
. -- by :user:`Dreamsorcerer`
Dropped Python 3.6 support.
Dropped Python 3.7 support. -- by :user:`Dreamsorcerer`
Removed support for abandoned tokio
event loop. -- by :user:`Dreamsorcerer`
Made print
argument in run_app()
optional.
Improved performance of ceil_timeout
in some cases.
Changed importing Gunicorn to happen on-demand, decreasing import time by ~53%. -- :user:`Dreamsorcerer`
Improved import time by replacing http.server
with http.HTTPStatus
.
Fixed annotation of ssl
parameter to disallow True
. -- by :user:`Dreamsorcerer`.
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.
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.
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.
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`
Fixed PermissionError
when .netrc
is unreadable due to permissions.
Fixed output of parsing errors pointing to a \n
. -- by :user:`Dreamsorcerer`
Fixed GunicornWebWorker
max_requests_jitter not working.
Fixed sorting in filter_cookies
to use cookie with longest path. -- by :user:`marq24`.
Fixed display of BadStatusLine
messages from llhttp. -- by :user:`Dreamsorcerer`
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.
Added information to C parser exceptions to show which character caused the error. -- by :user:`Dreamsorcerer`
Fixed a transport is :data:`None` error -- by :user:`Dreamsorcerer`.
ConnectionResetError
not being raised after client disconnection in SSL environments.
#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
Support registering OPTIONS HTTP method handlers via RouteTableDef. #4663
Started supporting authority-form
and absolute-form
URLs on the server-side.
#6227
Fix Python 3.11 alpha incompatibilities by using Cython 0.29.25 #6396
Remove a deprecated usage of pytest.warns(None) #6663
Fix regression where asyncio.CancelledError
occurs on client disconnection.
#6719
Export :py:class:`~aiohttp.web.PrefixedSubAppResource` under :py:mod:`aiohttp.web` -- by :user:`Dreamsorcerer`.
This fixes a regression introduced by :pr:`3469`. #6889
Dropped the :class:`object` type possibility from the :py:attr:`aiohttp.ClientSession.timeout` property return type declaration. #6917, #6923
Signal
from __all__
, replace aiohttp.Signal
with aiosignal.Signal
in docs
#6201
Added a GunicornWebWorker
feature for extending the aiohttp server configuration by allowing the 'wsgi' coroutine to return web.AppRunner
object.
#2988
Switch from http-parser
to llhttp
#3561
Use Brotli instead of brotlipy #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
Make access log use local time with timezone #3853
Implemented readuntil
in StreamResponse
#4054
FileResponse now supports ETag. #4594
Add a request handler type alias aiohttp.typedefs.Handler
.
#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
Add validation of HTTP header keys and values to prevent header injection. #4818
Add predicate to AbstractCookieJar.clear
.
Add AbstractCookieJar.clear_domain
to clean all domain and subdomains cookies only.
#4942
Add keepalive_timeout parameter to web.run_app. #5094
Tracing for client sent headers #5105
Make type hints for http parser stricter #5267
Add final declarations for constants. #5275
Switch to external frozenlist and aiosignal libraries. #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
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
Add aiohttp.pytest_plugin.AiohttpClient
for static typing of pytest plugin.
#5585
Added a socket_factory
argument to BaseTestServer
.
#5844
Add compression strategy parameter to enable_compression method. #5909
Added support for Python 3.10 to Github Actions CI/CD workflows and fix the related deprecation warnings -- :user:`Hanaasagi`. #5927
Switched chardet
to charset-normalizer
for guessing the HTTP payload body encoding -- :user:`Ousret`.
#5930
Added optional auto_decompress argument for HttpRequestParser #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
Added base_url
parameter to the initializer of :class:`~aiohttp.ClientSession`.
#6013
Add Trove classifier and create binary wheels for 3.10. -- :user:`hugovk`. #6079
Started shipping platform-specific wheels with the musl
tag targeting typical Alpine Linux runtimes — :user:`asvetlov`.
#6139
Started shipping platform-specific arm64 wheels for Apple Silicon — :user:`asvetlov`. #6139
no_proxy
environment variables.
#4431
routes.static('/foo', '/foo')
no longer matches the URL /foobar
. Previously, this would attempt to load the file /foo/ar
.
#5250
`_RequestContextManager
and _WSRequestContextManager
#5329
ClientResponse
object on calls to the ok
property for the failed requests.
#5403
tempfile.Temporaryfile
-created
_io.BufferedRandom
instances of files sent within multipart request
bodies via HTTP POST requests -- by :user:`webknjaz`.
#5494
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
HTTPUnauthorized
that access the text
argument. This is not used in any part of the code, so it's removed now.
#5657
params
keyword argument to ClientSession.ws_connect
. -- :user:`hoh`.
#5868
loop
argument from the asyncio.sleep
/gather
calls
#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
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
aio-openapi
#5326
Authorization
header is removed
on redirects to a different host or protocol.
#5850
chardet
runtime dependency
to allow their v4.0 version stream.
#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 for finding the first instance of this issue and Jelmer Vernooij for reporting and tracking it down in aiohttp. #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
web_middlewares.normalize_path_middleware
behavior for patch without slash.
#3669
sock_read
timeout each time data is received for a aiohttp.client
response.
#3808
aiohttp.web.FileResponse
.
#3958
aiohttp.client.request
.
#4603
.sendfile()
support
#5149
typing_extensions
library.
#5107
hostname
in each record, which prevented
validation of HTTPS connections.
#5110
web.run_app()
about Python version checking on Windows
#5127
on_response_prepare
hooks, directly before headers are sent to the client.
#1958
quote_cookie
option to CookieJar
, a way to skip quotation wrapping of cookies containing special characters.
#2571
AccessLogger.log
with the current exception available from sys.exc_info()
.
#3557
loop.sendfile()
instead of custom implementation if available.
#4269
read_bufsize
argument.
#4453
http_parser
to 2.9.4
#5070
Fix keepalive connections not being closed in time #3296
Fix failed websocket handshake leaving connection hanging. #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
Don't start heartbeat until _writer is set #4062
Fix handling of multipart file uploads without a content type. #4089
Preserve view handler function attributes across middlewares #4174
Fix the string representation of ServerDisconnectedError
.
#4175
Raising RuntimeError when trying to get encoding from not read body #4214
Remove warning messages from noop. #4282
Raise ClientPayloadError if FormData re-processed. #4345
Fix a warning about unfinished task in web_protocol.py
#4408
Fixed 'deflate' compression. According to RFC 2616 now. #4506
Fixed OverflowError on platforms with 32-bit time_t #4515
Fixed request.body_exists returns wrong value for methods without body. #4528
Fix connecting to link-local IPv6 addresses. #4554
Fix a problem with connection waiters that are never awaited. #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
Handle the last CRLF correctly even if it is received via separate TCP segment. #4630
Fix the register_resource function to validate route name before splitting it so that route name can include python keywords. #4691
Improve typing annotations for web.Request
, aiohttp.ClientResponse
and
multipart
module.
#4736
Fix resolver task is not awaited when connector is cancelled #4795
Fix a bug "Aiohttp doesn't return any error on invalid request methods" #4798
Fix HEAD requests for static content. #4809
Fix incorrect size calculation for memoryview #4890
Add HTTPMove to _all__. #4897
Fixed the type annotations in the tracing
module.
#4912
Fix typing for multipart __aiter__
.
#4931
Fix for race condition on connections in BaseConnector that leads to exceeding the connection limit. #4936
Add forced UTF-8 encoding for application/rdap+json
responses.
#4938
Fix inconsistency between Python and C http request parsers in parsing pct-encoded URL. #4972
Fix connection closing issue in HEAD request. #5012
Fix type hint on BaseRunner.addresses (from List[str]
to List[Any]
)
#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
ttl_dns_cache
default value
#3512
Optional[str]
to Optional[bool]
#4204
ttl_dns_cache
type from int to Optional[int].
#4270
aiohttp-sse-client
library to third party usage list.
#5084
<1.6.0
to avoid buggy behavior that will be fixed by the next aiohttp
release.Iterable
type hint instead of Sequence
for Application
middleware
parameter. #4125
sock_read
timeout each time data is received for a
aiohttp.ClientResponse
. #3808
ClientConnectorError
;
self.ssl == None
means default SSL context, not SSL disabled #4097
ssl.OP_NO_COMPRESSION
is
unavailable because the runtime is built against
an outdated OpenSSL.
#4052
Transfer-Encoding: chunked
header from websocket responses to be
compatible with more http proxy servers. #3798
Raise a ClientResponseError instead of an AssertionError for a blank HTTP Reason Phrase. #3532
Fix an issue where cookies would sometimes not be set during a redirect. #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
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
Signal
type annotation changed from Signal[Callable[['TraceConfig'],
Awaitable[None]]]
to Signal[Callable[ClientSession, SimpleNamespace, ...]
.
#3595
Use sanitized URL as Location header in redirects #3614
Improve typing annotations for multipart.py along with changes required by mypy in files that references multipart.py. #3621
Close session created inside aiohttp.request
when unhandled exception occurs
#3628
Cleanup per-chunk data in generic data read. Memory leak fixed. #3631
Use correct type for add_view and family #3633
Fix _keepalive field in __slots__ of RequestHandler
.
#3644
Properly handle ConnectionResetError, to silence the "Cannot write to closing transport" exception when clients disconnect uncleanly. #3648
Suppress pytest warnings due to test_utils
classes
#3660
Fix overshadowing of overlapped sub-application prefixes. #3701
Fixed return type annotation for WSMessage.json() #3720
Properly expose TooManyRedirects publicly as documented. #3818
Fix missing brackets for IPv6 in proxy CONNECT request #3841
Make the signature of aiohttp.test_utils.TestClient.request
match
asyncio.ClientSession.request
according to the docs #3852
Use correct style for re-exported imports, makes mypy --strict
mode happy.
#3868
Fixed type annotation for add_view method of UrlDispatcher to accept any subclass of View #3880
Made cython HTTP parser set Reason-Phrase of the response to an empty string if it is missing. #3906
Add URL to the string representation of ClientResponseError. #3959
Accept istr
keys in LooseHeaders
type hints.
#3976
Fixed race conditions in _resolve_host caching and throttling when tracing is enabled. #4013
For URLs like "unix://localhost/..." set Host HTTP header to "localhost" instead of "localhost:None". #4039
if __name__ == '__main__':
in server examples.
#3775
web.BaseRequest.path
and web.BaseRequest.raw_path
.
#3791
.read()
/ .readany()
/ .iter_any()
which used to return a
partial content only in case of compressed content
#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
aiohttp.ClientTimeout
type annotations to accept None
for fields
#3511
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
Payload.headers
are handled. Payload instances now always have headers and
Content-Type defined. Fix Payload Content-Disposition header reset after initial
creation. #3035
GunicornWebWorker
.
#3464
collections.MutableMapping
with collections.abc.MutableMapping
to
avoid a deprecation warning. #3480
Payload.size
type annotation changed from Optional[float]
to
Optional[int]
. #3484
web.run_app
finalization.
#3497
aiohttp.web.HTTPException
.
#3490
ClientSession._requote_redirect_url
modification in debug
mode.app
in the request returned by test_utils.make_mocked_request
can
now have objects assigned to it and retrieved using the []
operator. (#3174)request.url
accessible when transport is closed. (#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)ClientTimeout
in aiohttp.request
(#3213)NETRC
environment variable is not set and ~/.netrc
file doesn't exist. (#3267)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)session.ws_connect()
. Sometimes server API requires a
different HTTP method for WebSocket connection establishment. For example, Docker
exec
needs POST. (#3378)access_log_class
via handler_args
(#3158)CIMultiDictProxy
instances for headers
argument in web.Response
constructor. (#3207)app.pre_frozen
state to properly handle startup signals in
sub-applications. (#3237)normalize_path_middleware
. (#3278)raise_for_status
for aiohttp.request() (#3290)sendfile()
syscall is used by static file
handling. (#3383)asyncio.TimeoutError
which was not logged, when it is caught
in the handler. (#3414)Application.make_handler
parameters. (#3152)web.Application._handle
(#3229)session.requote_redirect_url
(#2278)stream.unread_data()
(#3260)resp.enable_compression()
(#3318)Connection.detach()
and Connection.writer
. Both methods were broken
for more than 2 years. (#3358)app.loop
, request.loop
, client.loop
and connector.loop
properties. (#3374)async with connector:
and await
connector.close()
instead. (#3417)read_timeout
and conn_timeout
in ClientSession
constructor. (#3438)app.pre_frozen
state to properly handle startup signals in sub-applications. (#3237)iter_chunks
type annotation (#3230)raise_for_status
request parameter (#3073)remove_slash
option to the normalize_path_middleware
factory. (#3173)data_received()
callback. (#3031)sock_read
timeout. (#3053)app.make_handler
is deprecated, recommend to use runners
API instead. (#3157)loop.current_task()
from helpers.current_task()
(#2826)reader
parameter from request.multipart()
. (#3090)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)ConnectionResetError
instead of CancelledError
on trying to
write to a closed stream. (#2499)ClientTimeout
class and support socket read timeout. (#2768)aiohttp.web
is used as a program (#2956)asyncio.streams.FlowControlMixin
(#2986)@helpers.reify
, 5% boost on macro benchmark (#2995)runner.addresses
property. (#3036)bytearray
instead of a list of bytes
in websocket reader. It
improves websocket message reading a little. (#3039)TooManyRedirects
exception when client gets redirected too many
times instead of returning last response. (#2631)web_routedef.py
file (#2876)request.config_dict
for exposing nested applications data. (#2949)async_timeout
usage from documentation for client API in favor of
timeout
parameter. (#2865)LineTooLong
exception more detailed about actual data size (#2863)on_chunk_sent
when write_eof takes as a param the last chunk (#2909)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)StreamReader
as data at client
side. (#2793)asyncio.current_task()
on Python 3.7 (#2825)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)_reuse_address
and _reuse_port
to
web_runner.TCPSite.__slots__
. (#2792)InvalidStateError
on processing a sequence of two
RequestHandler.data_received
calls on web server. (#2773)IndexError
in HTTP request handling by server. (#2752)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.async with test_client.ws_connect(...)
(#2525)ssl
parameter to client API (#2626)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)verify_ssl
, ssl_context
and fingerprint
parameters in
client API (#2626)ClientSession
and web.Application
and
custom user attributes for ClientSession
, web.Request
and
web.Application
(#2691)__doc__
) when registering synchronous
handlers for resources. (#1953)\r\n
before closing after keepalive timeout,
otherwise client can not detect socket disconnection. (#1883)web.run_app
not to bind to default host-port pair if only socket is
passed (#1786)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)
Close idle keep-alive connections on shutdown (#1222)
Modify regex in AccessLogger to accept underscore and numbers (#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)
Accept yarl.URL by server redirections (#1278)
Return yarl.URL by .make_url() testing utility (#1279)
Properly format IPv6 addresses by aiohttp.web.run_app (#1139)
Use yarl.URL by server API (#1288)
Revert resp.url back to str, introduce resp.url_obj (#1292)
Raise ValueError if BasicAuth login has a ":" character (#1307)
Fix bug when ClientRequest send payload file with opened as open('filename', 'r+b') (#1306)
Enhancement to AccessLogger (pass extra dict) (#1303)
Show more verbose message on import errors (#1319)
Added save and load functionality for CookieJar (#1219)
Added option on StaticRoute to follow symlinks (#1299)
Force encoding of application/json content type to utf-8 (#1339)
Fix invalid invocations of errors.LineTooLong (#1335)
Websockets: Stop async for iteration when connection is closed (#1144)
Ensure TestClient HTTP methods return a context manager (#1318)
Raise ClientDisconnectedError to FlowControlStreamReader read function if ClientSession object is closed by client when reading data. (#1323)
Document deployment without Gunicorn (#1120)
Add deprecation warning for MD5 and SHA1 digests when used for fingerprint of site certs in TCPConnector. (#1186)
Implement sub-applications (#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)
Extend ClientResponse with content_type and charset properties like in web.Request. (#1349)
Disable aiodns by default (#559)
Don't flap tcp_cork in client code, use TCP_NODELAY mode by default.
Implement web.Request.clone() (#1361)
aiohttp.MsgType
to aiohttp.WSMsgType
aiohttp.WSMessage
officiallyIntroduce on_shutdown signal (#722)
Implement raw input headers (#726)
Implement web.run_app utility function (#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)
Deprecate bare aiohttp.request(), aiohttp.get() and family (#729)
Refactor keep-alive support (#737)
Enable keepalive for HTTP 1.0 by default
Disable it for HTTP 0.9 (who cares about 0.9, BTW?)
For keepalived connections
- Send Connection: keep-alive for HTTP 1.0 only
- don't send Connection header for HTTP 1.1
For non-keepalived connections
- Send Connection: close for HTTP 1.1 only
- don't send Connection header for HTTP 1.0
Add version parameter to ClientSession constructor, deprecate it for session.request() and family (#736)
Enable access log by default (#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)
Add command line support: $ python -m aiohttp.web package.main (#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)
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)
Add support for unix domain sockets to gunicorn worker (#470)
Add test for default Expect handler (#601)
Add the first demo project
Rename loader keyword argument in web.Request.json method. (#646)
Add local socket binding for TCPConnector (#678)
----)
Use errors.HttpProcessingError.message as HTTP error reason and message (#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)
ClientResponse.close() forces connection closing by default from now (#479)
N.B. Backward incompatible change: was .close(force=False) Using `force parameter for the method is deprecated: use .release() instead.
Properly requote URL's path (#480)
add skip_auto_headers parameter for client API (#486)
Properly parse URL path in aiohttp.web.Request (#489)
Raise RuntimeError when chunked enabled and HTTP is 1.0 (#488)
Fix a bug with processing io.BytesIO as data parameter for client API (#500)
Skip auto-generation of Content-Type header (#507)
Use sendfile facility for static file handling (#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)
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)
Extend precision of access log "D" to milliseconds (#527)
Deprecate StreamResponse.start() method in favor of StreamResponse.prepare() coroutine (#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)
Add async with support for ClientSession.request() and family (#536)
Ignore message body on 204 and 304 responses (#505)
TCPConnector processed both IPv4 and IPv6 by default (#559)
Add .routes() view for urldispatcher (#519)
Route name should be a valid identifier name from now (#567)
Implement server signals (#562)
Drop a year-old deprecated files parameter from client API.
Added async for support for aiohttp stream (#542)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。