HEAD responses contain body

Jonathan Rudenberg jonathan at titanous.com
Thu Jun 13 18:42:32 UTC 2013


On Jun 13, 2013, at 2:22 PM, Eric Wong <normalperson at yhbt.net> wrote:

> Jonathan Rudenberg <jonathan at titanous.com> wrote:
>> RFC 2616 section 9.4[1] states:
>> 
>>> The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response.
>> 
>> A HEAD request against this simple Rack app running on unicorn-4.6.2:
>> 
>>    require 'rack'
>> 
> 
> +     use Rack::Head
> 
>>    run lambda { |env| [200, {}, []] }
> 
> The Rack::Head middleware should be used to correctly strip HEAD
> responses of their bodies (frameworks such as Rails/Sinatra should
> already add Rack::Head to the middleware stack for you)

This does not change the result, as the Rack::Head implementation looks like this:

    def call(env)
      status, headers, body = @app.call(env)

      if env["REQUEST_METHOD"] == "HEAD"
        body.close if body.respond_to? :close
        [status, headers, []]
      else
        [status, headers, body]
      end
    end

>> Looks like this on the wire:
>> 
>>    HEAD / HTTP/1.1
>>    User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8x zlib/1.2.5
>>    Host: localhost:8080
>>    Accept: */*
>> 
>>    HTTP/1.1 200 OK
>>    Date: Thu, 13 Jun 2013 16:04:55 GMT
>>    Status: 200 OK
>>    Connection: close
>>    Transfer-Encoding: chunked
>> 
>>    0
>> 
>>    HTTP/1.1 500 Internal Server Error
> 
>> As you can see, not only is there a zero-length chunked encoding body,
>> but for some unknown reason there is a 500 response with no body as
>> well.
> 
> Try using "-d" on the command-line to enable debugging to see what the
> error is (and check the logs/stderr output).

    Exception `Errno::ENOTCONN' at /Users/titanous/.gem/ruby/1.9.3/gems/unicorn-4.6.2/lib/unicorn/http_server.rb:565 - Socket is not connected

> Also, what RACK_ENV (or -E/--env) are you using?  It could be the
> incorrect HEAD response tripping Rack::Lint under development mode.

None, specified, I'm booting unicorn with no configuration or flags specified.

> 
>> Please cc any responses directly to me, as I do not subscribe to this list.
> 
> Done :>



More information about the mongrel-unicorn mailing list