= cowboy_req:stream_trailers(3)

== Name

cowboy_req:stream_trailers - Send the response trailers

== Description

[source,erlang]
----
stream_trailers(Trailers, Req :: cowboy_req:req()) -> ok

Trailers :: cowboy:http_headers()
----

Send the response trailers and terminate the stream.

This function can only be called once, after initiating
a response using
link:man:cowboy_req:stream_reply(3)[cowboy_req:stream_reply(3)]
and sending zero or more body chunks using
link:man:cowboy_req:stream_body(3)[cowboy_req:stream_body(3)]
with the `nofin` argument set. The function `stream_trailers/2`
implies `fin` and automatically terminate the response.

You must list all field names sent in trailers in the
trailer header, otherwise they might be dropped by intermediaries
or clients.

== Arguments

Trailers::

Trailer field values to be sent.

Req::

The Req object.

== Return value

The atom `ok` is always returned. It can be safely ignored.

== Changelog

* *2.2*: Function introduced.

== Examples

.Stream a response body with trailers
[source,erlang]
----
Req = cowboy_req:stream_reply(200, #{
    <<"content-type">> => <<"text/plain">>,
    <<"trailer">> => <<"expires, content-md5">>
}, Req0),
cowboy_req:stream_body(<<"Hello\n">>, nofin, Req),
timer:sleep(1000),
cowboy_req:stream_body(<<"World!\n">>, nofin, Req).
cowboy_req:stream_trailers(#{
    <<"expires">> => <<"Sun, 10 Dec 2017 19:13:47 GMT">>,
    <<"content-md5">> => <<"fbf68a8e34b2ded53bba54e68794b4fe">>
}, Req).
----

== See also

link:man:cowboy_req(3)[cowboy_req(3)],
link:man:cowboy_req:stream_reply(3)[cowboy_req:stream_reply(3)],
link:man:cowboy_req:stream_body(3)[cowboy_req:stream_body(3)],
link:man:cowboy_req:stream_events(3)[cowboy_req:stream_events(3)]
