有人能告诉我如何在所有请求中将 Erlang Cowboy Framework(即“Cowboy”)中的默认服务器签名更改为自定义签名吗?我的意思是 HTTP 响应 header 中键“服务器”的值。
亲切的问候,
莱安德罗
最佳答案
实现这一目标的最佳方法是使用 onresponse hookcowboy:start_http
接受一个参数列表,您可以在其中提供 onrequest
和 onresponse hooks
。基本语法非常简单。它只是一个由原子和函数名称组成的元组。
{onresponse, fun custom_onresponse/4}
在这个 onresponse 函数中,您可以修改标题。对于您想要删除
Server
header 的特殊情况。所以你 custom_onresponse 看起来像这样custom_onresponse(StatusCode,Headers,Body,Req)->
Headers2 =
lists:delete({<<"server">>,<<"Cowboy">>},Headers),
{ok,Req2} = cowboy_req:reply(StatusCode,Headers2,Body,Req),
Req2.
要替换它,您可以像这样使用 keyreplace function
Headers2 =
lists:keyreplace(<<"server">>,1,Headers,{<<"server">>,<<"Your_Header">>})
在cowboy repo的examples section中也提供了一个例子。希望这可以帮助。
关于http - Erlang Cowboy 更改 HTTP header 中的服务器签名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22591552/