Request for Review 6886723: light weight http server doesn't return correct status code for HEAD requests
Michael McMahon
michael.x.mcmahon at oracle.com
Wed May 5 03:22:47 PDT 2010
Looks good. Only comment would be that maybe the test should (also)
exercise the more
common "HEAD" scenario where an explicit Content-length is set. Since
the test runs
a number of times, maybe the handler could alternate between chunked and
fixed length.
- Michael.
Chris Hegarty wrote:
> Michael,
>
> Since we spoke off line about this, I implemented the changes we
> discussed. That is...
>
> To adhere to the API sendResponseHeaders should be invoked with a
> contentLength of -1, i.e. no content to be sent for HEAD requests.
> handler implementations that are required to handle HEAD requests will
> need to specifically determine this using
> HttpExchange.getRequestMethod and set the required headers manually,
> then invoke sendResponseHeaders with -1. An example of this is:
>
> if (msg.getRequestMethod().equals("HEAD")) {
> msg.getRequestBody().close();
> msg.getResponseHeaders().add("Transfer-encoding", chunked");
> msg.sendResponseHeaders(200, -1);
> }
>
> In the case that sendResponseHeaders is invoked with a content length
> greater than -1 the server will now log a warning message, and no
> output stream will be created.
>
> Updated Webrev:
> http://cr.openjdk.java.net/~chegar/6886723/webrev.01/webrev/
>
> -Chris.
>
>
> Chris Hegarty wrote:
>> Hi Michael,
>>
>> The HttpExchange implementation, sun.net.httpserver.ExchangeImpl,
>> does not correctly handle HEAD requests. The test, described in the
>> 'description section' of 6886723, invokes sendResponseHeaders with a
>> 0 responseLength, i.e. chunked encoding. The "Transfer-encoding:
>> chunked" header should be added to the response headers but no
>> ChunkedOutputStream should be created. The current implementation
>> does send an empty chunk causing subsequent requests on the same
>> persistent connection to have problems.
>>
>> The solution is to correctly set response headers, but create no
>> corresponding OutputStreams when dealing with HEAD requests.
>>
>> Webrev:
>> http://cr.openjdk.java.net/~chegar/6886723/webrev.00/webrev/
>>
>> Thanks,
>> -Chris
More information about the net-dev
mailing list