From 637a9b39249cf573b82d2493b7cedcf324b8537c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Wed, 14 Nov 2018 15:40:09 +0100 Subject: Don't send an unnecessary content-type header with cowboy_rest --- src/cowboy_rest.erl | 10 +++++++++- test/static_handler_SUITE.erl | 5 ++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/cowboy_rest.erl b/src/cowboy_rest.erl index b874692..606f47f 100644 --- a/src/cowboy_rest.erl +++ b/src/cowboy_rest.erl @@ -1595,7 +1595,15 @@ next(Req, State, Next) when is_function(Next) -> next(Req, State, StatusCode) when is_integer(StatusCode) -> respond(Req, State, StatusCode). -respond(Req, State, StatusCode) -> +respond(Req0, State, StatusCode) -> + %% We remove the content-type header when there is no body, + %% except when the status code is 200 because it might have + %% been intended (for example sending an empty file). + Req = case cowboy_req:has_resp_body(Req0) of + true when StatusCode =:= 200 -> Req0; + true -> Req0; + false -> cowboy_req:delete_resp_header(<<"content-type">>, Req0) + end, terminate(cowboy_req:reply(StatusCode, Req), State). switch_handler({switch_handler, Mod}, Req, #state{handler_state=HandlerState}) -> diff --git a/test/static_handler_SUITE.erl b/test/static_handler_SUITE.erl index 786438a..d4394c5 100644 --- a/test/static_handler_SUITE.erl +++ b/test/static_handler_SUITE.erl @@ -392,9 +392,8 @@ dir_error_directory_slash(Config) -> dir_error_doesnt_exist(Config) -> doc("Try to get a file that does not exist."), - %% @todo Check that the content-type header is removed. - {404, _Headers, _} = do_get(config(prefix, Config) ++ "/not.found", Config), -% false = lists:keyfind(<<"content-type">>, 1, Headers), + {404, Headers, _} = do_get(config(prefix, Config) ++ "/not.found", Config), + false = lists:keyfind(<<"content-type">>, 1, Headers), ok. dir_error_dot(Config) -> -- cgit v1.2.3