Skip to content

avoid duplicate Content-Length header in DefaultClient#3451

Open
alhudz wants to merge 1 commit into
OpenFeign:masterfrom
alhudz:content-length-duplicate
Open

avoid duplicate Content-Length header in DefaultClient#3451
alhudz wants to merge 1 commit into
OpenFeign:masterfrom
alhudz:content-length-duplicate

Conversation

@alhudz

@alhudz alhudz commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Repro: send a body-less POST/PUT whose template already carries a Content-Length header (e.g. @Headers("Content-Length: 0")), with sun.net.http.allowRestrictedHeaders=true so the header reaches the wire.
Cause: DefaultClient.convertAndSend writes the request Content-Length in the header loop and then unconditionally adds a second Content-Length: 0 for every body-less method that allows a body, so the field goes out twice. RFC 7230 §3.3.2 forbids generating multiple Content-Length fields; the duplicate is ambiguous framing and servers reject it (Tomcat returns 400, #2862).
Fix: only add the fallback Content-Length: 0 when the request does not already declare a Content-Length.

The regression test is gated on sun.net.http.allowRestrictedHeaders like the existing Content-Length tests, since HttpURLConnection otherwise drops the restricted header, and asserts the field is sent once.

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