RFR: 8283544: HttpClient GET method adds Content-Length: 0 header [v6]

Daniel Fuchs dfuchs at openjdk.java.net
Fri May 6 10:44:56 UTC 2022


On Fri, 6 May 2022 10:33:31 GMT, Conor Cleary <ccleary at openjdk.org> wrote:

>> **Issue**
>> When using the `HttpClient.send()` to send a GET request created using the `HttpRequest.newBuilder()`, a `Content-length: 0` header is set. This behaviour causes issues with many services as a body related header is usually not expected to be included with a GET request. 
>> 
>> **Solution**
>> `Http1Request.java` was modified so that when the request method is a GET, a `Content-length` header is not added to the request. However, if a developer chooses to include a body in a GET request (though it is generally considered bad practice), a `Content-length` header with the appropriate value will be added.
>
> Conor Cleary has updated the pull request incrementally with one additional commit since the last revision:
> 
>   8283544: Improved logging, drain input stream

Changes requested by dfuchs (Reviewer).

src/java.net.http/share/classes/jdk/internal/net/http/Http1Request.java line 311:

> 309:                 streaming = true;
> 310:                 systemHeadersBuilder.setHeader("Transfer-encoding", "chunked");
> 311:             }

With that - and if I'm not mistaken, lines 294-299 can be removed now.

test/jdk/java/net/httpclient/ContentLengthHeaderTest.java line 105:

> 103:                 .uri(URI.create(testContentLengthURI + NO_BODY_PATH))
> 104:                 .build();
> 105:         HttpClient hc = HttpClient.newHttpClient();

It would be better to reuse the same client for all tests. Also better to configure it with NO_PROXY.

-------------

PR: https://git.openjdk.java.net/jdk/pull/8017


More information about the net-dev mailing list