4
votes

Can someone tell me how to change default server signature in Erlang Cowboy Framework (which is "Cowboy") to a custom one, in all requests? I mean the value for the key "server" in HTTP response headers.

Kind regards, Leandro

2

2 Answers

6
votes

The best way to achieve this would be by using onresponse hook

cowboy:start_http accepts a list of arguments in which you can supply onrequest and onresponse hooks. The basic syntax is very simple. It is just a tuple consisting on an atom and the name of the function.

   {onresponse, fun custom_onresponse/4}

Within this onresponse function you can modify the headers. For your special case you want to remove Server header. So you custom_onresponse will look like this

custom_onresponse(StatusCode,Headers,Body,Req)-> 
                Headers2 = 
                lists:delete({<<"server">>,<<"Cowboy">>},Headers),
                {ok,Req2} = cowboy_req:reply(StatusCode,Headers2,Body,Req),
                Req2.

To replace it you can use keyreplace function like so

Headers2 = 
lists:keyreplace(<<"server">>,1,Headers,{<<"server">>,<<"Your_Header">>})

There is also an example provided in the examples section of cowboy repo. Hope this helps.

1
votes

It's illustrated by the manual entry's third code fragment.