diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 15c43691d5..a5371ef601 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -669,114 +669,67 @@ (define-public python-aiosignal
 (define-public python-aiohttp
   (package
     (name "python-aiohttp")
-    (version "3.8.4")
+    (version "3.10.11")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "aiohttp" version))
        (sha256
-        (base32 "0p5bj6g7ca19gvwk8fz00k579ma9w9kd27ssh2zl3r61ca8ilbmz"))
-       (snippet
-        #~(begin
-            (use-modules ((guix build utils)))
-            ;; TODO: Unbundle the llhttp sources.
-            ;; (delete-file-recursively "vendor")
-            (delete-file "aiohttp/_helpers.c")
-            (delete-file "aiohttp/_http_parser.c")
-            (delete-file "aiohttp/_http_writer.c")
-            (delete-file "aiohttp/_websocket.c")))))
-    (build-system python-build-system)
+        (base32 "19rk9n9293r8sdqilpxj9brycm9v1jjqv71hzbh3jbmbvkrvihlx"))))
+    (build-system pyproject-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'fix-tests
-           (lambda _
-             ;; Disable brotli tests, because we’re not providing that
-             ;; optional library.
-             (substitute* "tests/test_http_parser.py"
-               (("    async def test_feed_eof_no_err_brotli")
-                "    @pytest.mark.xfail\n    async def test_feed_eof_no_err_brotli"))
-             ;; Make sure the timestamp of this file is > 1990, because a few
-             ;; tests like test_static_file_if_modified_since_past_date depend
-             ;; on it.
-             (let ((late-90s (* 60 60 24 365 30)))
-               (utime "tests/data.unknown_mime_type" late-90s late-90s))
-
-             ;; Disable test that attempts to access httpbin.org.
-             (substitute* "tests/test_formdata.py"
-               (("async def test_mark_formdata_as_processed.*" all)
-                (string-append "@pytest.mark.xfail\n" all)))
-
-             ;; Don't test the aiohttp pytest plugin to avoid a dependency loop.
-             (delete-file "tests/test_pytest_plugin.py")))
-         (add-before 'build 'cythonize
-           (lambda _
-             ;; Adapted from the Makefile.
-             (with-directory-excursion "aiohttp"
-               (for-each
-                (lambda (file)
-                  (invoke "cython" "-3"
-                          file "-I" "."))
-                (find-files "." "_.*\\.pyx$")))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (let ((skipped-tests
-                     (string-append
-                       ;; This test probably requires to be run with the
-                       ;; library loaded from the the build directory.
-                       "not test_c_parser_loaded and "
-                       ;; TODO: These tests fail with recent versions of Pytest
-                       ;; and the fix is difficult to backport:
-                       ;; https://github.com/aio-libs/aiohttp/pull/6872
-                       ;; Re-enable after 3.9.
-                       "not test_session_close_awaitable and "
-                       "not test_async_with_session and "
-                       "not test_close_run_until_complete_not_deprecated and "
-                       ;; Disable the following tests as they require
-                       ;; networking.
-                       "not TestDeflateBuffer and "
-                       "not test_client_session_timeout_zero and "
-                       "not test_empty_body and "
-                       "not test_mark_formdata_as_processed[pyloop] and "
-                       "not test_receive_runtime_err[pyloop] "
-                       ;; These tests fail for unknown reasons (see:
-                       ;; https://github.com/aio-libs/aiohttp/issues/7130)
-                       "and not test_no_warnings "
-                       "and not test_default_loop "
-                       "and not test_ctor_global_loop "
-                       "and not test_set_loop_default_loop ")))
+                    (string-append
+                     ;; Disable the following tests as they require
+                     ;; networking.
+                     "not test_host_header_ipv6[pyloop-True] and "
+                     "not test_http_response_parser_strict_obs_line_folding[py-parser-pyloop] and "
+                     "not test_http_response_parser_strict_obs_line_folding[c-parser-pyloop] and "
+                     "not test_http_response_parser_strict_headers[c-parser-pyloop] and "
+                     "not test_http_response_parser_bad_chunked_strict_py[pyloop] and "
+                     "not test_http_response_parser_bad_chunked_strict_c[pyloop] and "
+                     "not test_add_static_path_resolution "
+                     ;; These tests fail for unknown reasons (see:
+                     ;; https://github.com/aio-libs/aiohttp/issues/7130)
+                     "and not test_no_warnings "
+                     "and not test_default_loop "
+                     "and not test_ctor_global_loop "
+                     "and not test_set_loop_default_loop "
+                     ;; This test depends on timing which makes it unstable.
+                     "and not test_import_time ")))
                (when tests?
-                 ;; This tests requires the 'proxy.py' module, not yet
-                 ;; packaged.
-                 (delete-file "tests/test_proxy_functional.py")
                  ;; Sometimes tests fail when run in parallel.
                  (invoke "pytest" "-vv"
                          "-o" "addopts=''" "--ignore=aiohttp"
-                         ;; These tests cause errors (see:
-                         ;; https://github.com/aio-libs/aiohttp/issues/7130).
-                         "--ignore" "tests/test_web_sendfile_functional.py"
-                         "--ignore" "tests/test_web_urldispatcher.py"
+                         ;; These tests require the 'proxy.py' module, not yet
+                         ;; packaged.
+                         "--ignore" "tests/test_proxy_functional.py"
+                         ;; These tests require Docker.
+                         "--ignore" "tests/autobahn/test_autobahn.py"
                          "-k" skipped-tests))))))))
     (propagated-inputs
      (list python-aiodns
+           python-aiohappyeyeballs
            python-aiosignal
-           python-attrs
-           python-asynctest
            python-async-timeout
-           python-charset-normalizer
+           python-attrs
+           python-brotli
            python-frozenlist
-           python-idna-ssl
            python-multidict
            python-yarl))
     (native-inputs
-     (list gunicorn-bootstrap
-           python-async-generator
-           python-cython
+     (list python-filelock
            python-freezegun
            python-pytest
+           python-pytest-codspeed
            python-pytest-mock
-           python-pytest-xdist
-           python-re-assert))
+           python-re-assert
+           python-setuptools
+           python-wheel))
     (home-page "https://github.com/aio-libs/aiohttp/")
     (synopsis "Async HTTP client/server framework (asyncio)")
     (description "@code{aiohttp} is an asynchronous HTTP client/server
