Skip to content

v2.10.0

Choose a tag to compare

@Kludex Kludex released this 09 Aug 09:10
· 15 commits to main since this release
a966320

Highlights

πŸš€ Performance and memory improvements

  • Sending large HTTP/2 request bodies no longer copies the body quadratically - sending a 256 MiB body went from ~36s to under 0.1s (#1127).
  • SSE parsing is up to 35x faster on highly fragmented streams (#1117).
  • Cookie extraction is now skipped for responses without a Set-Cookie header, making typical requests roughly 8% faster (#1107).

πŸ•ΈοΈ WebAssembly / Emscripten support

httpx2 now runs on Pyodide / Emscripten, using a JavaScript fetch-based transport defined in httpx2-jsfetch (#1119, #1114). Thanks @hoodmane!

httpx2

Added

  • Add support for running on WebAssembly / Emscripten via Pyodide by @hoodmane in #1119
  • Add max_event_size to cap SSE event buffering by @Kludex in #1071
  • Add RFC 9110 status code constants by @mbeijen in #1069
  • Add support for Python 3.15 by @hugovk in #1090

Changed

  • Improve SSE chunk buffering performance by @Kludex in #1117
  • Skip cookie extraction without Set-Cookie by @Kludex in #1107
  • Return str | None instead of Any from Headers.get by @ItsDrike in #1121

Fixed

  • Enforce WebSocket max message size across fragments by @Kludex in #1085
  • Ignore unsolicited and duplicate Pong frames by @Kludex in #1122

httpcore2

Added

Changed

  • Avoid quadratic copying when sending large HTTP/2 request bodies by @Kludex in #1127

Fixed

  • Propagate the original exception instead of raising KeyError when an HTTP/2 stream fails by @yhay81 in #1093
  • Start TLS for the wss scheme in SOCKS5 proxy connections by @Kludex in #1104

πŸ™ New Contributors

Full Changelog: v2.9.1...v2.10.0