[erlang-bugs] inets-4.7.16 doesn't handle HTTP 204 responses

Ingela Anderton Andin <>
Thu Nov 22 11:27:43 CET 2007


Hi!

Thank you for reporting this bug and for the patch suggestion. I have 
fixed the problem in inets-5.0 that
will be released in r12b early december. 

Regards Ingela - OTP team

Andrew Birkett wrote:
> Hi,
>
> I've been writing an erlang wrapper for Amazon's S3 storage service, 
> and I've found a problem with the way inets-4.7.16 (from 
> otp_src_R11B-5) handles the HTTP 204 (No content) status code.  I've 
> attached a suggested patch, and also included a method of reproducing 
> the problem.
>
> According to RFC 2616 section 4.3, a 204 response 'must not' contain 
> an entity body.  Therefore the content-length header is optional and 
> should be ignored regardless.
>
> The erlang library wrongly tries to use the content-length header when 
> it receives a 204 reply.  If the content-length header is not present, 
> httpc_handler tries to listen for more bytes on the socket.  With a 
> persistent HTTP connection, this means the application appears to hang.
>
> Attached is a patch against inets-4.7.16 which fixes this issue.  I've 
> only recently started using erlang, so I hope it's okay.  Also, here 
> is a way of reproducing the problem on unix using the socat utility as 
> a mock webserver.
>
> 1. Create a 'reply-204-no-content-length' script containing the 
> following:
> #!/bin/bash
> sleep 1
> echo -ne 'HTTP/1.1 204 No Content\r\nSomeHeader: foo\r\n\r\n'
> sleep 100
>
> 2. Run socat tcp-listen:9999,reuseaddr exec:./reply-204
>
> 3. Evaluate: http:request(put, {"http://localhost:9999/", 
> [{"Content-Length","1"}, {"Content-Type","text/plain"}], [], 
> <<1>>},[],[{sync,true}]).
>
> 4. This will hang for 101 seconds.  The call ultimately only returns 
> because socat has closed the connection.  With the patch applied, the 
> call returns immediately once the HTTP reply is received.
>
> Andrew
> -- 
> - http://www.nobugs.org -
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> erlang-bugs mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-bugs




More information about the erlang-bugs mailing list