Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ServerDisconnectedError with get compress=True #3413

Closed
kapkirl opened this issue Nov 29, 2018 · 4 comments · Fixed by #9108
Closed

ServerDisconnectedError with get compress=True #3413

kapkirl opened this issue Nov 29, 2018 · 4 comments · Fixed by #9108
Labels
Milestone

Comments

@kapkirl
Copy link

kapkirl commented Nov 29, 2018

Long story short

While using aiohttp found a lot of ServerDisconnectedError messages, while simple curl fetched same target with no problems. So after small research I made some scripts to reproduce behavior. And looks like session can't finish get request with compress=True.

Expected behaviour

Sessions get method finishes properly. Is there way I can use compression in such conditions?

Actual behaviour

Using compress=True in get request - produces ServerDisconnectedError.

    ....
   connector = TCPConnector(force_close=False)
    async with ClientSession(connector=connector) as session:
        while not tq.empty():
            num = tq.get()
            try:
                async with session.get(url=url, compress=True, allow_redirects=True) as response:
                    txt = await response.read()
    .....

I was trying to force closing connection by force_close=True in connector. But that caused creation of new hanging connections (tracking them with watch -n 0.1 'netstat -n | grep :8080 | wc').

When using compress=False. Everything works fine.

Steps to reproduce

server.py

import asyncio
from datetime import datetime
from aiohttp import web
import random

random.seed(1)

html_body = b'Hello world!!!'

async def hello(request):
    n = datetime.now().isoformat()
    delay = random.randint(0, 0)
    await asyncio.sleep(delay)
    headers = {"content_type": "text/html", "delay": str(delay), 'request_catched': str(n)}
    response = web.Response(body=html_body, headers=headers)
    return response

app = web.Application()
app.router.add_route("GET", "/{name}", hello)
web.run_app(app)

client.py

import sys
import traceback
import asyncio
from aiohttp import ClientSession, TCPConnector
import queue
import datetime

max_tasks = 10
err_count = 0
loop = asyncio.get_event_loop()
tq = queue.Queue()
rq = queue.Queue()


async def fetch(worker_id):
    global err_count
    url = "http://localhost:8080/hello"
    connector = TCPConnector(force_close=False)
    async with ClientSession(connector=connector) as session:
        while not tq.empty():
            num = tq.get()

            try:
                async with session.get(url=url, compress=True, allow_redirects=True) as response:
                    txt = await response.read()
                    sys.stdout.write("[{}]: {}: OK: {}: {}. result: {}\n".format(
                        worker_id, datetime.datetime.now(), num, response.url, txt))
                    rq.put(num)
                    sys.stdout.write("{}\n{}\n".format(response.cookies, response.raw_headers))
                    sys.stdout.write("{}\n".format('-' * 10))

            except Exception as e0:
                sys.stdout.write('[{}]: {}: Exception: {}\n'.format(worker_id, datetime.datetime.now(), e0))
                traceback.print_exc()

                tq.put(num)
                err_count += 1


async def control():
    global err_count
    dif = 0
    prev_size = 0
    qsize = rq.qsize()
    while qsize < max_tasks:
        await asyncio.sleep(1)
        qsize = rq.qsize()
        sys.stdout.write('{}: qsize: {}; dif: {}; err_count: {}\n'.format(
           datetime.datetime.now(), qsize, qsize - prev_size, err_count
        ))
        err_count = 0
        prev_size = qsize
    loop.stop()

for t in range(max_tasks):
    tq.put(t)

asyncio.ensure_future(control())
workers_count = 1
for i in range(workers_count):
    asyncio.ensure_future(fetch(i))
loop.run_forever()
loop.close()

Start running server.py, and then client.py. Got such logs from client.

[0]: 2018-11-29 14:36:04.136142: OK: 0: http://localhost:8080/hello. result: b'Hello world!!!'
....
got no results, and after a minute ....
....

    async with session.get(url=url, compress=True, allow_redirects=True) as response:
  File "/usr/local/lib/python3.6/site-packages/aiohttp/client.py", line 855, in __aenter__
    self._resp = await self._coro
  File "/usr/local/lib/python3.6/site-packages/aiohttp/client.py", line 391, in _request
    await resp.start(conn)
  File "/usr/local/lib/python3.6/site-packages/aiohttp/client_reqrep.py", line 757, in start
    message, payload = await self._protocol.read()
  File "/usr/local/lib/python3.6/site-packages/aiohttp/streams.py", line 543, in read
    await self._waiter
aiohttp.client_exceptions.ServerDisconnectedError: None

after this message again OK result, and then same error.

Your environment

Ubuntu 14.04
Python 3.6.1
aiohttp 3.4.4

@aio-libs-bot
Copy link

GitMate.io thinks the contributor most likely able to help you is @asvetlov.

Possibly related issues are #117 (HTTP GET + compress=True = 501), #2198 (Document encoded=True for yarl.URL), #3364 (HTTP response not released with raise_for_status=True), #394 (ServerDisconnectedError is trigger happy), and #2859 (Deprecate Application(debug=True) in favor of DEBUG global flag).

@kapkirl
Copy link
Author

kapkirl commented Dec 7, 2018

Any suggestions on this subject?

@Dreamsorcerer
Copy link
Member

Dreamsorcerer commented Aug 9, 2024

Not sure why the reproducer above is so complicated. I can still reproduce this issue with:

Server

from aiohttp import web

async def hello(request):
    return web.Response(text="hello")

app = web.Application()
app.router.add_route("GET", "/", hello)
web.run_app(app)

Client

import asyncio
from aiohttp import ClientSession

async def fetch():
    async with ClientSession() as session:
        for _ in range(10):
            async with session.get("http://localhost:8080/", compress=True) as response:
                txt = await response.read()

asyncio.run(fetch())

Client now reports ConnectionResetError: Cannot write to closing transport
Which appears to be correct, because the server is reporting:

Traceback (most recent call last):
  File "/home/ubuntu/.local/lib/python3.10/site-packages/aiohttp/web_protocol.py", line 355, in data_received
    messages, upgraded, tail = self._request_parser.feed_data(data)
  File "aiohttp/_http_parser.pyx", line 557, in aiohttp._http_parser.HttpParser.feed_data
aiohttp.http_exceptions.BadStatusLine: 400, message:
  Invalid method encountered:

    b'x\x9c\x03'
      ^

Curiously, if I use a TCPConnector(force_close=True), that resolves the client side exceptions, but I still get the BadStatusLine on several requests. Something must be messing up the decompression.

@Dreamsorcerer
Copy link
Member

Actually, docs say:

Set to True if request has to be compressed with deflate encoding. If compress can not be combined with a Content-Encoding and Content-Length headers.

So, this option is incorrectly compressing the request without any headers for the server to know this.
This is presumably for some kind of legacy thing and shouldn't be used generally.

We should atleast rename the parameter in v4 to make this a lot clearer.

@Dreamsorcerer Dreamsorcerer added this to the 4.0 milestone Aug 9, 2024
github-actions bot pushed a commit that referenced this issue Sep 13, 2024
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.2.2 to 2.2.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/urllib3/urllib3/releases">urllib3's
releases</a>.</em></p>
<blockquote>
<h2>2.2.3</h2>
<h2>🚀 urllib3 is fundraising for HTTP/2 support</h2>
<p><a
href="https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support">urllib3
is raising ~$40,000 USD</a> to release HTTP/2 support and ensure
long-term sustainable maintenance of the project after a sharp decline
in financial support for 2023. If your company or organization uses
Python and would benefit from HTTP/2 support in Requests, pip, cloud
SDKs, and thousands of other projects <a
href="https://opencollective.com/urllib3">please consider contributing
financially</a> to ensure HTTP/2 support is developed sustainably and
maintained for the long-haul.</p>
<p>Thank you for your support.</p>
<h2>Features</h2>
<ul>
<li>Added support for Python 3.13. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3473">#3473</a>)</li>
</ul>
<h2>Bugfixes</h2>
<ul>
<li>Fixed the default encoding of chunked request bodies to be UTF-8
instead of ISO-8859-1. All other methods of supplying a request body
already use UTF-8 starting in urllib3 v2.0. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3053">#3053</a>)</li>
<li>Fixed ResourceWarning on CONNECT with Python &lt; 3.11.4 by
backporting <a
href="https://redirect.github.com/python/cpython/issues/103472">python/cpython#103472</a>.
(`<a
href="https://redirect.github.com/urllib3/urllib3/issues/3252">#3252</a>)</li>
<li>Adjust tolerance for floating-point comparison on Windows to avoid
flakiness in CI (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3413">#3413</a>)</li>
<li>Fixed a crash where certain standard library hash functions were
absent in restricted environments. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3432">#3432</a>)</li>
<li>Fixed mypy error when adding to
<code>HTTPConnection.default_socket_options</code>. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3448">#3448</a>)</li>
</ul>
<h2>HTTP/2 (experimental)</h2>
<p>HTTP/2 support is still in early development.</p>
<ul>
<li>Excluded Transfer-Encoding: chunked from HTTP/2 request body (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3425">#3425</a>)</li>
<li>Added version checking for <code>h2</code> (<a
href="https://pypi.org/project/h2/">https://pypi.org/project/h2/</a>)
usage. Now only accepting supported h2 major version 4.x.x. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3290">#3290</a>)</li>
<li>Added a probing mechanism for determining whether a given target
origin supports HTTP/2 via ALPN. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3301">#3301</a>)</li>
<li>Add support for sending a request body with HTTP/2 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3302">#3302</a>)</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/urllib3/urllib3/compare/2.2.2...2.2.3">https://github.com/urllib3/urllib3/compare/2.2.2...2.2.3</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/urllib3/urllib3/blob/main/CHANGES.rst">urllib3's
changelog</a>.</em></p>
<blockquote>
<h1>2.2.3 (2024-09-12)</h1>
<h2>Features</h2>
<ul>
<li>Added support for Python 3.13.
(<code>[#3473](urllib3/urllib3#3473)
&lt;https://github.com/urllib3/urllib3/issues/3473&gt;</code>__)</li>
</ul>
<h2>Bugfixes</h2>
<ul>
<li>Fixed the default encoding of chunked request bodies to be UTF-8
instead of ISO-8859-1.
All other methods of supplying a request body already use UTF-8 starting
in urllib3 v2.0.
(<code>[#3053](urllib3/urllib3#3053)
&lt;https://github.com/urllib3/urllib3/issues/3053&gt;</code>__)</li>
<li>Fixed ResourceWarning on CONNECT with Python <!-- raw HTML omitted
-->`__)</li>
<li>Adjust tolerance for floating-point comparison on Windows to avoid
flakiness in CI
(<code>[#3413](urllib3/urllib3#3413)
&lt;https://github.com/urllib3/urllib3/issues/3413&gt;</code>__)</li>
<li>Fixed a crash where certain standard library hash functions were
absent in restricted environments.
(<code>[#3432](urllib3/urllib3#3432)
&lt;https://github.com/urllib3/urllib3/issues/3432&gt;</code>__)</li>
<li>Fixed mypy error when adding to
<code>HTTPConnection.default_socket_options</code>.
(<code>[#3448](urllib3/urllib3#3448)
&lt;https://github.com/urllib3/urllib3/issues/3448&gt;</code>__)</li>
</ul>
<h2>HTTP/2 (experimental)</h2>
<p>HTTP/2 support is still in early development.</p>
<ul>
<li>
<p>Excluded Transfer-Encoding: chunked from HTTP/2 request body
(<code>[#3425](urllib3/urllib3#3425)
&lt;https://github.com/urllib3/urllib3/issues/3425&gt;</code>__)</p>
</li>
<li>
<p>Added version checking for <code>h2</code> (<a
href="https://pypi.org/project/h2/">https://pypi.org/project/h2/</a>)
usage.</p>
<p>Now only accepting supported h2 major version 4.x.x.
(<code>[#3290](urllib3/urllib3#3290)
&lt;https://github.com/urllib3/urllib3/issues/3290&gt;</code>__)</p>
</li>
<li>
<p>Added a probing mechanism for determining whether a given target
origin
supports HTTP/2 via ALPN.
(<code>[#3301](urllib3/urllib3#3301)
&lt;https://github.com/urllib3/urllib3/issues/3301&gt;</code>__)</p>
</li>
<li>
<p>Add support for sending a request body with HTTP/2
(<code>[#3302](urllib3/urllib3#3302)
&lt;https://github.com/urllib3/urllib3/issues/3302&gt;</code>__)</p>
</li>
</ul>
<h2>Deprecations and Removals</h2>
<ul>
<li>Note for downstream distributors: the <code>_version.py</code> file
has been removed and is now created at build time by hatch-vcs.
(<code>[#3412](urllib3/urllib3#3412)
&lt;https://github.com/urllib3/urllib3/issues/3412&gt;</code>__)</li>
<li>Drop support for end-of-life PyPy3.8 and PyPy3.9.
(<code>[#3475](urllib3/urllib3#3475)
&lt;https://github.com/urllib3/urllib3/issues/3475&gt;</code>__)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/urllib3/urllib3/commit/2458bfcd3dacdf6c196e98d077fc6bb02a5fc1df"><code>2458bfc</code></a>
Release 2.2.3</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/9b25db6d00e43858d49303ae55c43bc4a9832668"><code>9b25db6</code></a>
Only attempt to publish for upstream</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/b9adeef8501180cd7d04cc3fb90bed4bbc34b1bb"><code>b9adeef</code></a>
Drop support for EOL PyPy3.8 and PyPy3.9</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/b1d4649d43375f11a3072b4d9b5d33425d123bae"><code>b1d4649</code></a>
Add explicit support for Python 3.13</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/cc42860721836febf3fb6ebb485ed27d7f80122d"><code>cc42860</code></a>
Bump cryptography from 42.0.4 to 43.0.1 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3470">#3470</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/3dae2e9b30d2e39bf20daea2353aa7ef055640cf"><code>3dae2e9</code></a>
Bump pypa/gh-action-pypi-publish from 1.9.0 to 1.10.1 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3469">#3469</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/1e94feb2a671bf28721114dfea1105a2c1f91788"><code>1e94feb</code></a>
Revert &quot;Add TLS settings for HTTP/2 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3456">#3456</a>)&quot;
(<a
href="https://redirect.github.com/urllib3/urllib3/issues/3466">#3466</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/aa73abc7b22a4a67e0ee957f5a3031109f73d3d9"><code>aa73abc</code></a>
Bump actions/setup-python from 5.1.0 to 5.2.0 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3468">#3468</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/abbfbcb1dd274fc54b4f0a7785fd04d59b634195"><code>abbfbcb</code></a>
Add 1.26.20 to changelog and make the publish workflow the same (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3464">#3464</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/d48061505e72271116c5a33b04dbca6273f2a737"><code>d480615</code></a>
Add TLS settings for HTTP/2 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3456">#3456</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/urllib3/urllib3/compare/2.2.2...2.2.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=urllib3&package-manager=pip&previous-version=2.2.2&new-version=2.2.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
github-actions bot pushed a commit that referenced this issue Sep 16, 2024
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.2.2 to 2.2.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/urllib3/urllib3/releases">urllib3's
releases</a>.</em></p>
<blockquote>
<h2>2.2.3</h2>
<h2>🚀 urllib3 is fundraising for HTTP/2 support</h2>
<p><a
href="https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support">urllib3
is raising ~$40,000 USD</a> to release HTTP/2 support and ensure
long-term sustainable maintenance of the project after a sharp decline
in financial support for 2023. If your company or organization uses
Python and would benefit from HTTP/2 support in Requests, pip, cloud
SDKs, and thousands of other projects <a
href="https://opencollective.com/urllib3">please consider contributing
financially</a> to ensure HTTP/2 support is developed sustainably and
maintained for the long-haul.</p>
<p>Thank you for your support.</p>
<h2>Features</h2>
<ul>
<li>Added support for Python 3.13. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3473">#3473</a>)</li>
</ul>
<h2>Bugfixes</h2>
<ul>
<li>Fixed the default encoding of chunked request bodies to be UTF-8
instead of ISO-8859-1. All other methods of supplying a request body
already use UTF-8 starting in urllib3 v2.0. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3053">#3053</a>)</li>
<li>Fixed ResourceWarning on CONNECT with Python &lt; 3.11.4 by
backporting <a
href="https://redirect.github.com/python/cpython/issues/103472">python/cpython#103472</a>.
(`<a
href="https://redirect.github.com/urllib3/urllib3/issues/3252">#3252</a>)</li>
<li>Adjust tolerance for floating-point comparison on Windows to avoid
flakiness in CI (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3413">#3413</a>)</li>
<li>Fixed a crash where certain standard library hash functions were
absent in restricted environments. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3432">#3432</a>)</li>
<li>Fixed mypy error when adding to
<code>HTTPConnection.default_socket_options</code>. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3448">#3448</a>)</li>
</ul>
<h2>HTTP/2 (experimental)</h2>
<p>HTTP/2 support is still in early development.</p>
<ul>
<li>Excluded Transfer-Encoding: chunked from HTTP/2 request body (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3425">#3425</a>)</li>
<li>Added version checking for <code>h2</code> (<a
href="https://pypi.org/project/h2/">https://pypi.org/project/h2/</a>)
usage. Now only accepting supported h2 major version 4.x.x. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3290">#3290</a>)</li>
<li>Added a probing mechanism for determining whether a given target
origin supports HTTP/2 via ALPN. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3301">#3301</a>)</li>
<li>Add support for sending a request body with HTTP/2 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3302">#3302</a>)</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/urllib3/urllib3/compare/2.2.2...2.2.3">https://github.com/urllib3/urllib3/compare/2.2.2...2.2.3</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/urllib3/urllib3/blob/main/CHANGES.rst">urllib3's
changelog</a>.</em></p>
<blockquote>
<h1>2.2.3 (2024-09-12)</h1>
<h2>Features</h2>
<ul>
<li>Added support for Python 3.13.
(<code>[#3473](urllib3/urllib3#3473)
&lt;https://github.com/urllib3/urllib3/issues/3473&gt;</code>__)</li>
</ul>
<h2>Bugfixes</h2>
<ul>
<li>Fixed the default encoding of chunked request bodies to be UTF-8
instead of ISO-8859-1.
All other methods of supplying a request body already use UTF-8 starting
in urllib3 v2.0.
(<code>[#3053](urllib3/urllib3#3053)
&lt;https://github.com/urllib3/urllib3/issues/3053&gt;</code>__)</li>
<li>Fixed ResourceWarning on CONNECT with Python <!-- raw HTML omitted
-->`__)</li>
<li>Adjust tolerance for floating-point comparison on Windows to avoid
flakiness in CI
(<code>[#3413](urllib3/urllib3#3413)
&lt;https://github.com/urllib3/urllib3/issues/3413&gt;</code>__)</li>
<li>Fixed a crash where certain standard library hash functions were
absent in restricted environments.
(<code>[#3432](urllib3/urllib3#3432)
&lt;https://github.com/urllib3/urllib3/issues/3432&gt;</code>__)</li>
<li>Fixed mypy error when adding to
<code>HTTPConnection.default_socket_options</code>.
(<code>[#3448](urllib3/urllib3#3448)
&lt;https://github.com/urllib3/urllib3/issues/3448&gt;</code>__)</li>
</ul>
<h2>HTTP/2 (experimental)</h2>
<p>HTTP/2 support is still in early development.</p>
<ul>
<li>
<p>Excluded Transfer-Encoding: chunked from HTTP/2 request body
(<code>[#3425](urllib3/urllib3#3425)
&lt;https://github.com/urllib3/urllib3/issues/3425&gt;</code>__)</p>
</li>
<li>
<p>Added version checking for <code>h2</code> (<a
href="https://pypi.org/project/h2/">https://pypi.org/project/h2/</a>)
usage.</p>
<p>Now only accepting supported h2 major version 4.x.x.
(<code>[#3290](urllib3/urllib3#3290)
&lt;https://github.com/urllib3/urllib3/issues/3290&gt;</code>__)</p>
</li>
<li>
<p>Added a probing mechanism for determining whether a given target
origin
supports HTTP/2 via ALPN.
(<code>[#3301](urllib3/urllib3#3301)
&lt;https://github.com/urllib3/urllib3/issues/3301&gt;</code>__)</p>
</li>
<li>
<p>Add support for sending a request body with HTTP/2
(<code>[#3302](urllib3/urllib3#3302)
&lt;https://github.com/urllib3/urllib3/issues/3302&gt;</code>__)</p>
</li>
</ul>
<h2>Deprecations and Removals</h2>
<ul>
<li>Note for downstream distributors: the <code>_version.py</code> file
has been removed and is now created at build time by hatch-vcs.
(<code>[#3412](urllib3/urllib3#3412)
&lt;https://github.com/urllib3/urllib3/issues/3412&gt;</code>__)</li>
<li>Drop support for end-of-life PyPy3.8 and PyPy3.9.
(<code>[#3475](urllib3/urllib3#3475)
&lt;https://github.com/urllib3/urllib3/issues/3475&gt;</code>__)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/urllib3/urllib3/commit/2458bfcd3dacdf6c196e98d077fc6bb02a5fc1df"><code>2458bfc</code></a>
Release 2.2.3</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/9b25db6d00e43858d49303ae55c43bc4a9832668"><code>9b25db6</code></a>
Only attempt to publish for upstream</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/b9adeef8501180cd7d04cc3fb90bed4bbc34b1bb"><code>b9adeef</code></a>
Drop support for EOL PyPy3.8 and PyPy3.9</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/b1d4649d43375f11a3072b4d9b5d33425d123bae"><code>b1d4649</code></a>
Add explicit support for Python 3.13</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/cc42860721836febf3fb6ebb485ed27d7f80122d"><code>cc42860</code></a>
Bump cryptography from 42.0.4 to 43.0.1 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3470">#3470</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/3dae2e9b30d2e39bf20daea2353aa7ef055640cf"><code>3dae2e9</code></a>
Bump pypa/gh-action-pypi-publish from 1.9.0 to 1.10.1 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3469">#3469</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/1e94feb2a671bf28721114dfea1105a2c1f91788"><code>1e94feb</code></a>
Revert &quot;Add TLS settings for HTTP/2 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3456">#3456</a>)&quot;
(<a
href="https://redirect.github.com/urllib3/urllib3/issues/3466">#3466</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/aa73abc7b22a4a67e0ee957f5a3031109f73d3d9"><code>aa73abc</code></a>
Bump actions/setup-python from 5.1.0 to 5.2.0 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3468">#3468</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/abbfbcb1dd274fc54b4f0a7785fd04d59b634195"><code>abbfbcb</code></a>
Add 1.26.20 to changelog and make the publish workflow the same (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3464">#3464</a>)</li>
<li><a
href="https://github.com/urllib3/urllib3/commit/d48061505e72271116c5a33b04dbca6273f2a737"><code>d480615</code></a>
Add TLS settings for HTTP/2 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3456">#3456</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/urllib3/urllib3/compare/2.2.2...2.2.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=urllib3&package-manager=pip&previous-version=2.2.2&new-version=2.2.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants