Skip to content

fix(http/response): Don't write body on HEAD request - #34

Merged
mpenet merged 2 commits into
mpenet:mainfrom
malcolmsparks:main
Apr 19, 2026
Merged

mpenet merged 2 commits into
mpenet:mainfrom
malcolmsparks:main

Conversation

@malcolmsparks

Copy link
Copy Markdown
Contributor

RFC 9110 8.6 contains the following paragraph:

"A server MAY send a Content-Length header field in a response to a HEAD request (Section 9.3.2); a server MUST NOT send Content-Length in such a response unless its field value equals the decimal number of octets that would have been sent in the content of a response if the same request had used the GET method."

When writing a nil body and closing the output stream, Helidon recomputes the length of the body bytes and overwrites any content-length header provided. In the case of a HEAD request, where a content-length header may be provided but where there is no body, this causes the content-length to be reset to 0.

This commit adds a special set-head-response! function that avoids writing the body, and calls send() on the server-response instead, as required by Helidon, see
https://helidon.io/docs/v4/se/webserver/webserver#anchor-sending-response

Fixes #33

Malcolm Sparks added 2 commits April 17, 2026 16:59
RFC 9110 8.6 contains the following paragraph:

"A server MAY send a Content-Length header field in a response to a
HEAD request (Section 9.3.2); a server MUST NOT send Content-Length in
such a response unless its field value equals the decimal number of
octets that would have been sent in the content of a response if the
same request had used the GET method."

When writing a nil body and closing the output stream, Helidon
recomputes the length of the body bytes and overwrites any
content-length header provided. In the case of a HEAD request, where a
content-length header may be provided but where there is no body, this
causes the content-length to be reset to 0.

This commit adds a special set-head-response! function that avoids
writing the body, and calls send() on the server-response instead, as
required by Helidon, see
https://helidon.io/docs/v4/se/webserver/webserver#anchor-sending-response
@mpenet
mpenet merged commit 83dc24a into mpenet:main Apr 19, 2026
1 check passed
@mpenet

mpenet commented Apr 19, 2026

Copy link
Copy Markdown
Owner

Thanks!

@mpenet

mpenet commented Apr 19, 2026

Copy link
Copy Markdown
Owner

It's on clojars as 1.0.0-alpha213

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.

Content-Length always 0 in HEAD requests

2 participants