diff options
author | Loïc Hoguin <[email protected]> | 2017-11-29 21:38:10 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2017-11-29 21:38:10 +0100 |
commit | b0519af42a4d3ee7e345967206bd1d0050e9061b (patch) | |
tree | 893faa21f4adab4070138da124fbc9f308f71f01 | |
parent | 8d9404e9b64a84117e765caa9b79877a15e5b693 (diff) | |
download | cowboy-b0519af42a4d3ee7e345967206bd1d0050e9061b.tar.gz cowboy-b0519af42a4d3ee7e345967206bd1d0050e9061b.tar.bz2 cowboy-b0519af42a4d3ee7e345967206bd1d0050e9061b.zip |
Don't include a content-length in 204 responses
-rw-r--r-- | src/cowboy_req.erl | 5 | ||||
-rw-r--r-- | test/rfc7230_SUITE.erl | 2 |
2 files changed, 6 insertions, 1 deletions
diff --git a/src/cowboy_req.erl b/src/cowboy_req.erl index da3a0a4..e38b76c 100644 --- a/src/cowboy_req.erl +++ b/src/cowboy_req.erl @@ -725,6 +725,11 @@ reply(Status, Headers, SendFile = {sendfile, _, Len, _}, Req) do_reply(Status, Headers#{ <<"content-length">> => integer_to_binary(Len) }, SendFile, Req); +%% 204 responses must not include content-length. (RFC7230 3.3.1, RFC7230 3.3.2) +reply(Status=204, Headers, Body, Req) -> + do_reply(Status, Headers, Body, Req); +reply(Status= <<"204",_/bits>>, Headers, Body, Req) -> + do_reply(Status, Headers, Body, Req); reply(Status, Headers, Body, Req) when is_integer(Status); is_binary(Status) -> do_reply(Status, Headers#{ diff --git a/test/rfc7230_SUITE.erl b/test/rfc7230_SUITE.erl index bca620d..9175fa9 100644 --- a/test/rfc7230_SUITE.erl +++ b/test/rfc7230_SUITE.erl @@ -1764,7 +1764,7 @@ no_content_length_in_204_response(Config) -> "(RFC7230 3.3.1, RFC7230 3.3.2)"), Client = raw_open(Config), ok = raw_send(Client, [ - "GET /resp/reply4/204 HTTP/1.1\r\n" + "GET /resp/reply3/204 HTTP/1.1\r\n" "Host: localhost\r\n" "\r\n"]), {_, 204, _, Rest} = cow_http:parse_status_line(raw_recv_head(Client)), |