There is a discussion surrounding this issue at 9524. I have two responses to that discussion.
"This response is primarily intended to allow input for actions to take place without causing a change to the user agent's active document view, although any new or updated metainformation SHOULD be applied to the document currently in the user agent's active view."
As a HEAD request is a safe request, it seems to be oblique to the intent of the 204. A 200 seems more appropriate and standard.
"The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response."
It seems pretty clear that to be HTTP 1.1 compliant, a HEAD request cannot return a body.
The patch attached ensures that the default status code for a HEAD request is 200, as well as returning no response message body. It also ensures that you can set the status code for a HEAD request to other than 200.
I added a render type (:empty_body). This was an attempt to preclude Safari-specific logic. Instead, render :nothing will continue to send a single space as the body, but a render :empty_body will send nothing. In the patch, head now uses render :empty_body
Also, there were a few tests that were looking for HEAD requests to return a single space in the body. These have been changed to look for an empty body.