Erlang 更改yaws respond中的特定标头

Erlang 更改yaws respond中的特定标头,erlang,http-headers,yaws,http-response-codes,Erlang,Http Headers,Yaws,Http Response Codes,我想动态地(在构建响应时)更改yaws中的http头“Server:”值。我试过:- [{status, 200}, {allheaders, [{header, ["Server: ","ASP.NET Development Server/10.0.0.0"] }] }, {html,Body} ] 它返回两个“服务器:”头,而不是一个。但是它对所有其他头都有效。对于yaws的旧版本(yaws-1.90及以下版本),下面的答案有效现在,默认

我想动态地(在构建响应时)更改yaws中的http头“Server:”值。我试过:-

[{status, 200},
 {allheaders,
      [{header,
          ["Server: ","ASP.NET Development Server/10.0.0.0"]
      }]
 },
 {html,Body}
]
它返回两个“服务器:”头,而不是一个。但是它对所有其他头都有效。

对于yaws的旧版本(yaws-1.90及以下版本),下面的答案有效
现在,默认情况下,任何指定为
[{header,“Server:MyOther Server Name”}]
的头,yaws都将在服务器头值之前强制执行并标记其名称和版本,如下所示:
服务器:yaws 1.91,MyOther服务器名称
。当在
out/1
函数中以头值结尾时,会发生这种情况,服务器如下所示:

out(_A)->
[{header,"Server: ASP.NET Server"},
{html,"<p>I love klacke and yaws ! </p>"}]. make_server_header() -> HasDav = ?sc_has_dav(get(sc)), ["Server: ", (get(gc))#gconf.yaws, "\r\n" | if HasDav == true -> ["DAV: 1\r\n"]; true -> [] end]. make_server_header() -> %%HasDav = ?sc_has_dav(get(sc)), %%["Server: ", (get(gc))#gconf.yaws, "\r\n" | %% if HasDav == true -> %% ["DAV: 1\r\n"]; %% true -> %% [] %% end]. []. %% force it to just return empty 这段代码将yaws版本和服务器名称附加到服务器头指定值的顶部。我们需要更改它并注释掉这些行,让它返回一个
空列表[]
空字符串“”
,如下所示:

out(_A)->
[{header,"Server: ASP.NET Server"},
{html,"<p>I love klacke and yaws ! </p>"}]. make_server_header() -> HasDav = ?sc_has_dav(get(sc)), ["Server: ", (get(gc))#gconf.yaws, "\r\n" | if HasDav == true -> ["DAV: 1\r\n"]; true -> [] end]. make_server_header() -> %%HasDav = ?sc_has_dav(get(sc)), %%["Server: ", (get(gc))#gconf.yaws, "\r\n" | %% if HasDav == true -> %% ["DAV: 1\r\n"]; %% true -> %% [] %% end]. []. %% force it to just return empty 然后,在更改yaws.erl的源代码之后执行此操作(仍然在yaws shell中),正如我们前面提到的 2> c(yaws). {ok,yaws} 2> c(雅司病)。 {好的,是的}

现在将生成的yaws.beam文件从src移动到ebin。用src中的文件覆盖/替换ebin中现有的yaws.beam文件 $ mv PATH/TO/YAWS/src/yaws.beam PATH/TO/YAWS/ebin/ $mv PATH/TO/YAWS/src/YAWS.beam PATH/TO/YAWS/ebin/ 因此,如果yaws正在运行,请通过在其shell中输入以下内容来重新加载代码:

3> l(yaws). 3> l(雅司病)。
对于较新版本的yaws(yaws-1.91及以上版本)

您只需将一个参数添加到您的
yaws.conf
文件

server\u signature=“MY server signature”


中,因此从2011年5月发布的yaws 1.90版开始,标题将随附
server:MY server signature
,您可以设置全局配置变量
server\u signature
以自定义
server
HTTP响应头。在撰写本文时,我们还在使每个虚拟服务器上的
server\u签名
覆盖成为可覆盖的,因此,如果您愿意,您可以从不同的虚拟服务器提供不同的
server
头。此更改将在2012年2月初添加到中,稍后将在Yaws 1.93中出现,无论何时我们决定发布。

谢谢,但每次我都必须添加我自己的“服务器:”标题,我不介意。哦,是的,这就是成本。但是,您可以对
yaws.erl
中的函数进行任何重新调整,以始终放置所需的标题,而不是注释掉所有代码。实际上,与其从函数返回
[]
,不如让它返回您的标题,这样您就不必一直将其放在代码中