4

有人可以告诉我如何在所有请求中将 Erlang Cowboy Framework(即“Cowboy”)中的默认服务器签名更改为自定义签名吗?我的意思是 HTTP 响应标头中键“服务器”的值。

亲切的问候,莱安德罗

4

2 回答 2

6

实现这一目标的最佳方法是使用onresponse 钩子

cowboy:start_http接受一个参数列表,您可以在其中提供onrequestonresponse hooks。基本语法非常简单。它只是一个由原子和函数名称组成的元组。

   {onresponse, fun custom_onresponse/4}

在这个 onresponse 函数中,您可以修改标题。对于您的特殊情况,您想要删除Server标题。所以你 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 功能

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

牛仔回购的示例部分还提供了一个示例。希望这可以帮助。

于 2014-03-23T14:13:06.010 回答
1

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

于 2015-03-22T09:39:18.593 回答