Visitar URL original
Respect explicit Transfer-Encoding headers by Kludex · Pull Request #1137 · pydantic/httpx2 · GitHub
Skip to content

Respect explicit Transfer-Encoding headers - #1137

Merged
Kludex merged 2 commits into
mainfrom
fix/respect-explicit-transfer-encoding
Aug 13, 2026
Merged

Kludex merged 2 commits into
mainfrom
fix/respect-explicit-transfer-encoding

Conversation

@Kludex

@Kludex Kludex commented Aug 13, 2026 •

Copy link
Copy Markdown
Member

Summary

Request._prepare() already keeps an explicit Content-Length when the content encoder provides a default Transfer-Encoding. This applies the same precedence in the other direction: an explicit Transfer-Encoding now takes precedence over a body-derived Content-Length.

This makes handling of explicit framing headers consistent for fixed and streaming request content, and adds regression coverage for fixed content.

WSGITransport buffers request bodies before constructing the WSGI environment. When a buffered body has no explicit Content-Length, the transport now exposes its known length as CONTENT_LENGTH so WSGI applications can consume the input normally.

Validation

  • pytest tests/httpx2/models/test_requests.py tests/httpx2/test_wsgi.py -q — 38 passed
  • pytest tests/httpx2 -q — 1721 passed, 1 skipped
  • scripts/check — passed

Checklist

  • I understand that this PR may be closed in case there was no previous discussion. (This doesn't apply to typos!)
  • I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change.
  • No documentation update is needed for this internal request-preparation consistency change.

@github-actions

github-actions Bot commented Aug 13, 2026 •

Copy link
Copy Markdown

@codspeed

codspeed Bot commented Aug 13, 2026 •

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 17 untouched benchmarks
⏩ 7 skipped benchmarks1


Comparing fix/respect-explicit-transfer-encoding (ea98f72) with main (4fa6c8e)

Open in CodSpeed

Footnotes

  1. 7 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b423bdab5e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/httpx2/httpx2/_models.py

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 2 files

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread src/httpx2/httpx2/_models.py
@Kludex
Kludex merged commit 829b93a into main Aug 13, 2026
19 checks passed
@Kludex
Kludex deleted the fix/respect-explicit-transfer-encoding branch August 13, 2026 15:21
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Aug 25, 2026
## 2.12.0 (August 18th, 2026)

### Changed

* Use `backports.zstd` for Zstandard decoding on Python 3.13 and earlier.
  ([#1146](pydantic/httpx2#1146))

### Fixed

* Bound peak memory while streaming compressed responses and close response streams when decoding fails.
  ([#1126](pydantic/httpx2#1126))

## 2.11.0 (August 18th, 2026)

### Added

* Add the public `Origin` value object and `URL.origin` property for normalized,
  hashable origin comparisons. ([#1134](pydantic/httpx2#1134))

### Changed

* Require Brotli 1.2.0 or later for the `brotli` extra. ([#1141](pydantic/httpx2#1141))

### Fixed

* Restore deprecated status code aliases. ([#1135](pydantic/httpx2#1135))
* Extract HTTP/2 release notes from changelog headings correctly. ([#1136](pydantic/httpx2#1136))
* Respect explicit `Transfer-Encoding` headers and expose buffered request body lengths to WSGI applications.
  ([#1137](pydantic/httpx2#1137))
* Validate multipart part header names and values before serialization.
  ([#1142](pydantic/httpx2#1142))

This branch was previously deployed

1 inactive deployment
cloudflare — ea98f725 Deployed Aug 13, 2026 by Kludex via Docs preview (Cloudflare) #702
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant