Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Erlang Cowboy change server signature in HTTP headers

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

like image 200
lealoureiro Avatar asked Mar 21 '23 03:03

lealoureiro


1 Answers

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.

like image 60
Akshat Jiwan Sharma Avatar answered Apr 06 '23 06:04

Akshat Jiwan Sharma