mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-15 12:40:25 +00:00
Fix a bug where dupe headers were sent in cowboy_http_req:reply/4.
Now the server defines default headers that can be overwritten by the handler simply by passing them to the reply/4 function. Default headers include, for now, Connection and Content-Length headers. Note that it isn't enough to change the Connection header to close a keep-alive connection server-side.
This commit is contained in:
parent
4048499af2
commit
c32db277c8
3 changed files with 34 additions and 12 deletions
|
@ -174,15 +174,18 @@ body_qs(Req) ->
|
|||
|
||||
-spec reply(Code::http_status(), Headers::http_headers(),
|
||||
Body::iolist(), Req::#http_req{}) -> {ok, Req::#http_req{}}.
|
||||
%% @todo Don't be naive about the headers!
|
||||
reply(Code, Headers, Body, Req=#http_req{socket=Socket,
|
||||
transport=Transport, connection=Connection,
|
||||
resp_state=waiting}) ->
|
||||
StatusLine = ["HTTP/1.1 ", status(Code), "\r\n"],
|
||||
BaseHeaders = ["Connection: ", atom_to_connection(Connection),
|
||||
"\r\nContent-Length: ", integer_to_list(iolist_size(Body)), "\r\n"],
|
||||
Transport:send(Socket,
|
||||
[StatusLine, BaseHeaders, Headers, "\r\n", Body]),
|
||||
DefaultHeaders = [
|
||||
{"Connection", atom_to_connection(Connection)},
|
||||
{"Content-Length", integer_to_list(iolist_size(Body))}
|
||||
],
|
||||
Headers2 = lists:keysort(1, Headers),
|
||||
Headers3 = lists:ukeymerge(1, Headers2, DefaultHeaders),
|
||||
Headers4 = [[Key, ": ", Value, "\r\n"] || {Key, Value} <- Headers3],
|
||||
Transport:send(Socket, [StatusLine, Headers4, "\r\n", Body]),
|
||||
{ok, Req#http_req{resp_state=done}}.
|
||||
|
||||
%% Internal.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue