On Tue, 29 Mar 2022 19:43:50 GMT, Daniel Fuchs <[email protected]> wrote:
>> src/java.net.http/share/classes/jdk/internal/net/http/Http1Request.java line
>> 302:
>>
>>> 300:
>>> 301: // GET with no body should not set the Content-Length header
>>> 302: if (requestPublisher != null ||
>>> !"GET".equals(request.method())) {
>>
>> Can we remove the check for "GET"? This way we will let the users decide if
>> they want to send content-length or not, regardless of the chosen request
>> method.
>
> Practically that would mean not sending Content-Length: 0 by default for GET,
> DELETE, and HEAD. All other requests methods would have either a
> Content-Length or Transfer-Encoding. I suspect that HEAD should probably be
> handled the same way than GET. But should DELETE not have a body? I know that
> some servers will balk if DELETE has a body. But would they expect
> Content-Length: 0 not to be included? @Michael-Mc-Mahon what do you think?
RFC 7230 section 3.3.2 says:
"A user agent SHOULD NOT send a
Content-Length header field when the request message does not contain
a payload body and the method semantics do not anticipate such a
body."
I don't think the DELETE method anticipates a a request body. So, it shouldn't
have a Content-Length header either IMO. Same for HEAD also.
-------------
PR: https://git.openjdk.java.net/jdk/pull/8017