Question

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

Was it helpful?

Solution

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.

OTHER TIPS

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top