0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 20:30:23 +00:00

Do not send empty chunks

User code may sometimes send an empty value which gets understood
by the client as being the end of the stream while this was not
intended. Ignoring empty values allow making sure the stream isn't
ended by mistake.
This commit is contained in:
Loïc Hoguin 2015-02-16 19:49:01 +01:00
parent 8d2063bb2e
commit d2205d9ea6
2 changed files with 7 additions and 2 deletions

View file

@ -823,8 +823,11 @@ chunk(Data, #http_req{socket=Socket, transport=Transport,
ok = Transport:send(Socket, Data);
chunk(Data, #http_req{socket=Socket, transport=Transport,
resp_state=chunks}) ->
ok = Transport:send(Socket, [integer_to_list(iolist_size(Data), 16),
<<"\r\n">>, Data, <<"\r\n">>]).
case iolist_size(Data) of
0 -> ok;
Size -> Transport:send(Socket, [integer_to_list(Size, 16),
<<"\r\n">>, Data, <<"\r\n">>])
end.
%% If ever made public, need to send nothing if HEAD.
-spec last_chunk(Req) -> Req when Req::req().

View file

@ -6,6 +6,8 @@
init(Req, Opts) ->
Req2 = cowboy_req:chunked_reply(200, Req),
%% Try an empty chunk to make sure the stream doesn't get closed.
cowboy_req:chunk([<<>>], Req2),
timer:sleep(100),
cowboy_req:chunk("chunked_handler\r\n", Req2),
timer:sleep(100),