diff --git a/meta-python/recipes-devtools/python/python3-uvicorn/0002-ptest-skip-test_headers.patch b/meta-python/recipes-devtools/python/python3-uvicorn/0002-ptest-skip-test_headers.patch
new file mode 100644
index 0000000000..6b921db579
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-uvicorn/0002-ptest-skip-test_headers.patch
@@ -0,0 +1,87 @@
+From c3af69a818548c8b45c5cb7ac1ab782f63233ce4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 16 Aug 2026 06:38:10 +0200
+Subject: [PATCH] ptest: skip tests broken by the websockets 17.0.1 client
+ API
+
+Three tests use client-side helper code that no longer matches the
+distro's pinned websockets==17.0.1:
+
+* test_headers calls websockets.client.connect() (the legacy
+  websockets.legacy.client API, which is still what the
+  "websockets.client" submodule resolves to). That legacy client
+  protocol's handshake is incompatible with the modern-only server
+  implementation uvicorn uses for the "websockets" and
+  "websockets-sansio" backends: the connection is closed before a
+  valid HTTP response is sent, so the client raises
+  "websockets.exceptions.InvalidMessage: did not receive a valid HTTP
+  response" for those two backends (all http_protocol_cls variants).
+  The wsproto backend is unaffected.
+
+* test_fragmented_message_exceeding_max_size and
+  test_fragmented_message_reassembly call websockets.connect() (the
+  new asyncio client) and then ws.write_frame(...) on the returned
+  ClientConnection. write_frame only exists on the legacy
+  WebSocketCommonProtocol; the new asyncio/sansio ClientConnection
+  never had it, so these fail with
+  "AttributeError: 'ClientConnection' object has no attribute
+  'write_frame'" for every backend combination.
+
+All three are plain client-side test-helper API mismatches against
+websockets 17.0.1, not uvicorn server bugs. Reproduced locally against
+the distro's exact pinned dependency versions (websockets==17.0.1,
+wsproto==1.3.2, h11==0.16.0, httptools==0.8.0), independent of qemu/
+target. Skipped to match this recipe's existing precedent in
+0001-ptest-disable-failing-tests.patch, which also skips fully
+parametrized tests based on only some combinations failing.
+
+Upstream-Status: Inappropriate (embedded specific)
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tests/protocols/test_websocket.py | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+diff --git a/tests/protocols/test_websocket.py b/tests/protocols/test_websocket.py
+index 87a151d..85eb362 100644
+--- a/tests/protocols/test_websocket.py
++++ b/tests/protocols/test_websocket.py
+@@ -204,6 +204,11 @@ async def test_close_connection(ws_protocol_cls: WSProtocol, http_protocol_cls:
+         assert not is_open
+
+
++# FAIL: tests/protocols/test_websocket.py:test_headers[websockets-httptools]
++# FAIL: tests/protocols/test_websocket.py:test_headers[websockets-h11]
++# FAIL: tests/protocols/test_websocket.py:test_headers[websockets-sansio-httptools]
++# FAIL: tests/protocols/test_websocket.py:test_headers[websockets-sansio-h11]
++@pytest.mark.skip(reason="failing on Yocto/OpenEmbedded")
+ async def test_headers(ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProtocol, unused_tcp_port: int):
+     class App(WebSocketResponse):
+         async def websocket_connect(self, message: WebSocketConnectEvent):
+@@ -758,6 +763,13 @@ async def test_send_binary_data_to_server_bigger_than_default_on_websockets(
+                 assert ws.close_code == expected_result
+
+
++# FAIL: tests/protocols/test_websocket.py:test_fragmented_message_exceeding_max_size[wsproto-httptools]
++# FAIL: tests/protocols/test_websocket.py:test_fragmented_message_exceeding_max_size[wsproto-h11]
++# FAIL: tests/protocols/test_websocket.py:test_fragmented_message_exceeding_max_size[websockets-httptools]
++# FAIL: tests/protocols/test_websocket.py:test_fragmented_message_exceeding_max_size[websockets-h11]
++# FAIL: tests/protocols/test_websocket.py:test_fragmented_message_exceeding_max_size[websockets-sansio-httptools]
++# FAIL: tests/protocols/test_websocket.py:test_fragmented_message_exceeding_max_size[websockets-sansio-h11]
++@pytest.mark.skip(reason="failing on Yocto/OpenEmbedded")
+ async def test_fragmented_message_exceeding_max_size(
+     ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProtocol, unused_tcp_port: int
+ ):
+@@ -782,6 +794,13 @@ async def test_fragmented_message_exceeding_max_size(
+     assert exc_info.value.rcvd.code == 1009
+
+
++# FAIL: tests/protocols/test_websocket.py:test_fragmented_message_reassembly[wsproto-httptools]
++# FAIL: tests/protocols/test_websocket.py:test_fragmented_message_reassembly[wsproto-h11]
++# FAIL: tests/protocols/test_websocket.py:test_fragmented_message_reassembly[websockets-httptools]
++# FAIL: tests/protocols/test_websocket.py:test_fragmented_message_reassembly[websockets-h11]
++# FAIL: tests/protocols/test_websocket.py:test_fragmented_message_reassembly[websockets-sansio-httptools]
++# FAIL: tests/protocols/test_websocket.py:test_fragmented_message_reassembly[websockets-sansio-h11]
++@pytest.mark.skip(reason="failing on Yocto/OpenEmbedded")
+ async def test_fragmented_message_reassembly(
+     ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProtocol, unused_tcp_port: int
+ ):
diff --git a/meta-python/recipes-devtools/python/python3-uvicorn_0.49.0.bb b/meta-python/recipes-devtools/python/python3-uvicorn_0.49.0.bb
index 7145973628..c5c7ac0a69 100644
--- a/meta-python/recipes-devtools/python/python3-uvicorn_0.49.0.bb
+++ b/meta-python/recipes-devtools/python/python3-uvicorn_0.49.0.bb
@@ -6,7 +6,9 @@ RECIPE_MAINTAINER = "Tom Geelen <t.f.g.geelen@gmail.com>"
 
 SRC_URI[sha256sum] = "ebf4271aa580d9de97f93192d4595176df6e91f9aae919ca73e4fc07df1e66a3"
 
-SRC_URI += "file://0001-ptest-disable-failing-tests.patch"
+SRC_URI += "file://0001-ptest-disable-failing-tests.patch \
+            file://0002-ptest-skip-test_headers.patch \
+            "
 
 inherit pypi python_hatchling ptest-python-pytest
 
