- Made exceptions pickleable. Also changed the repr of some exceptions. #4077
- Use
Iterable
type hint instead ofSequence
forApplication
middleware parameter. #4125
- Reset the
sock_read
timeout each time data is received for aaiohttp.ClientResponse
. #3808 - Fix handling of expired cookies so they are not stored in CookieJar. #4063
- Fix misleading message in the string representation of
ClientConnectorError
;self.ssl == None
means default SSL context, not SSL disabled #4097 - Don't clobber HTTP status when using FileResponse. #4106
- Added minimal required logging configuration to logging documentation. #2469
- Update docs to reflect proxy support. #4100
- Fix typo in code example in testing docs. #4108
- Compatibility with Python 3.8. #4056
- correct some exception string format #4068
- Emit a warning when
ssl.OP_NO_COMPRESSION
is unavailable because the runtime is built against an outdated OpenSSL. #4052 - Update multidict requirement to >= 4.5 #4057
- Provide pytest-aiohttp namespace for pytest fixtures in docs. #3723
- Add support for Named Pipes (Site and Connector) under Windows. This feature requires Proactor event loop to work. #3629
- Removed
Transfer-Encoding: chunked
header from websocket responses to be compatible with more http proxy servers. #3798 - Accept non-GET request for starting websocket handshake on server side. #3980
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 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 withasyncio.run()
. #3587Signal
type annotation changed fromSignal[Callable[['TraceConfig'], Awaitable[None]]]
toSignal[Callable[ClientSession, SimpleNamespace, ...]
. #3595Use 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 #3628Cleanup 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
. #3644Properly handle ConnectionResetError, to silence the "Cannot write to closing transport" exception when clients disconnect uncleanly. #3648
Suppress pytest warnings due to
test_utils
classes #3660Fix 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
matchasyncio.ClientSession.request
according to the docs #3852Use correct style for re-exported imports, makes mypy
--strict
mode happy. #3868Fixed 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 inLooseHeaders
type hints. #3976Fixed 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
- Modify documentation for Background Tasks to remove deprecated usage of event loop. #3526
- use
if __name__ == '__main__':
in server examples. #3775 - Update documentation reference to the default access logger. #3783
- Improve documentation for
web.BaseRequest.path
andweb.BaseRequest.raw_path
. #3791 - Removed deprecation warning in tracing example docs #3964
- Fix stream
.read()
/.readany()
/.iter_any()
which used to return a partial content only in case of compressed content #3525
- Fix type stubs for
aiohttp.web.run_app(access_log=True)
and fix edge case ofaccess_log=True
and the event loop being in debug mode. #3504 - Fix
aiohttp.ClientTimeout
type annotations to acceptNone
for fields #3511 - Send custom per-request cookies even if session jar is empty #3515
- Restore Linux binary wheels publishing on PyPI
FileResponse
fromweb_fileresponse.py
uses aThreadPoolExecutor
to work with files asynchronously. I/O based payloads frompayload.py
uses aThreadPoolExecutor
to work with I/O objects asynchronously. #3313- Internal Server Errors in plain text if the browser does not support HTML. #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 - Log suppressed exceptions in
GunicornWebWorker
. #3464 - Remove wildcard imports. #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
- Fix handling of chunked+gzipped response when first chunk does not give uncompressed data #3477
- Replace
collections.MutableMapping
withcollections.abc.MutableMapping
to avoid a deprecation warning. #3480 Payload.size
type annotation changed fromOptional[float]
toOptional[int]
. #3484- Ignore done tasks when cancels pending activities on
web.run_app
finalization. #3497
- Add documentation for
aiohttp.web.HTTPException
. #3490
- Fix a regression about
ClientSession._requote_redirect_url
modification in debug mode.
- The library type annotations are checked in strict mode now.
- Add support for setting cookies for individual request (#2387)
- Application.add_domain implementation (#2809)
- The default
app
in the request returned bytest_utils.make_mocked_request
can now have objects assigned to it and retrieved using the[]
operator. (#3174) - Make
request.url
accessible when transport is closed. (#3177) - Add
zlib_executor_size
argument toResponse
constructor to allow compression to run in a background executor to avoid blocking the main thread and potentially triggering health check failures. (#3205) - Enable users to set
ClientTimeout
inaiohttp.request
(#3213) - Don't raise a warning if
NETRC
environment variable is not set and~/.netrc
file doesn't exist. (#3267) - Add default logging handler to web.run_app If the
Application.debug`
flag is set and the default loggeraiohttp.access
is used, access logs will now be output using a stderrStreamHandler
if no handlers are attached. Furthermore, if the default logger has no log level set, the log level will be set toDEBUG
. (#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) - Create a task per request handling. (#3406)
- Enable passing
access_log_class
viahandler_args
(#3158) - Return empty bytes with end-of-chunk marker in empty stream reader. (#3186)
- Accept
CIMultiDictProxy
instances forheaders
argument inweb.Response
constructor. (#3207) - Don't uppercase HTTP method in parser (#3233)
- Make method match regexp RFC-7230 compliant (#3235)
- Add
app.pre_frozen
state to properly handle startup signals in sub-applications. (#3237) - Enhanced parsing and validation of helpers.BasicAuth.decode. (#3239)
- Change imports from collections module in preparation for 3.8. (#3258)
- Ensure Host header is added first to ClientRequest to better replicate browser (#3265)
- Fix forward compatibility with Python 3.8: importing ABCs directly from the collections module will not be supported anymore. (#3273)
- Keep the query string by
normalize_path_middleware
. (#3278) - Fix missing parameter
raise_for_status
for aiohttp.request() (#3290) - Bracket IPv6 addresses in the HOST header (#3304)
- Fix default message for server ping and pong frames. (#3308)
- Fix tests/test_connector.py typo and tests/autobahn/server.py duplicate loop def. (#3337)
- Fix false-negative indicator end_of_HTTP_chunk in StreamReader.readchunk function (#3361)
- Release HTTP response before raising status exception (#3364)
- Fix task cancellation when
sendfile()
syscall is used by static file handling. (#3383) - Fix stack trace for
asyncio.TimeoutError
which was not logged, when it is caught in the handler. (#3414)
- Improve documentation of
Application.make_handler
parameters. (#3152) - Fix BaseRequest.raw_headers doc. (#3215)
- Fix typo in TypeError exception reason in
web.Application._handle
(#3229) - Make server access log format placeholder %b documentation reflect behavior and docstring. (#3307)
- Deprecate modification of
session.requote_redirect_url
(#2278) - Deprecate
stream.unread_data()
(#3260) - Deprecated use of boolean in
resp.enable_compression()
(#3318) - Encourage creation of aiohttp public objects inside a coroutine (#3331)
- Drop dead
Connection.detach()
andConnection.writer
. Both methods were broken for more than 2 years. (#3358) - Deprecate
app.loop
,request.loop
,client.loop
andconnector.loop
properties. (#3374) - Deprecate explicit debug argument. Use asyncio debug mode instead. (#3381)
- Deprecate body parameter in HTTPException (and derived classes) constructor. (#3385)
- Deprecate bare connector close, use
async with connector:
andawait connector.close()
instead. (#3417) - Deprecate obsolete
read_timeout
andconn_timeout
inClientSession
constructor. (#3438)
- #3341, #3351