mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 12:20:24 +00:00
Fix closing of connection on response_body_too_small
This commit is contained in:
parent
8452df0617
commit
d143235a79
2 changed files with 10 additions and 6 deletions
|
@ -1215,7 +1215,7 @@ stream_terminate(State0=#state{opts=Opts, in_streamid=InStreamID, in_state=InSta
|
|||
info(State0, StreamID, {response, 204, #{}, <<>>});
|
||||
chunked when Version =:= 'HTTP/1.1' ->
|
||||
info(State0, StreamID, {data, fin, <<>>});
|
||||
streaming when ExpectedSize < SentSize ->
|
||||
streaming when SentSize < ExpectedSize ->
|
||||
terminate(State0, response_body_too_small);
|
||||
_ -> %% done or Version =:= 'HTTP/1.0'
|
||||
State0
|
||||
|
|
|
@ -151,7 +151,6 @@ do_get_error(Path, Headers, Config) ->
|
|||
nofin -> gun:await_body(ConnPid, Ref);
|
||||
fin -> {ok, <<>>}
|
||||
end,
|
||||
gun:close(ConnPid),
|
||||
case Result of
|
||||
{ok, RespBody} -> {Status, RespHeaders, do_decode(RespHeaders, RespBody)};
|
||||
_ -> Result
|
||||
|
@ -953,16 +952,21 @@ stream_body_content_length_nofin(Config) ->
|
|||
ok.
|
||||
|
||||
stream_body_content_length_nofin_error(Config) ->
|
||||
doc("Not all of body sent."),
|
||||
doc("Not all of the response body sent."),
|
||||
case config(protocol, Config) of
|
||||
http ->
|
||||
case do_get_error("/resp/stream_body_content_length/nofin-error", Config) of
|
||||
%% When compression is used content-length is not sent.
|
||||
{200, Headers, <<"Hello">>} ->
|
||||
{_, <<"gzip">>} = lists:keyfind(<<"content-encoding">>, 1, Headers);
|
||||
%% The server closes the connection when the body couldn't be sent fully.
|
||||
{error, {stream_error, closed}} ->
|
||||
ok;
|
||||
{error, timeout} ->
|
||||
ok
|
||||
receive
|
||||
{gun_down, ConnPid, _, _, _, _} ->
|
||||
gun:close(ConnPid)
|
||||
after 1000 ->
|
||||
error(timeout)
|
||||
end
|
||||
end;
|
||||
http2 ->
|
||||
%% @todo HTTP2 should have the same content-length checks
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue