5

我想在 yaws 中动态更改 http-header "Server:"值(在构建响应时)。我试过:-

[{status, 200},
 {allheaders,
      [{header,
          ["Server: ","ASP.NET Development Server/10.0.0.0"]
      }]
 },
 {html,Body}
]

它返回两个 “服务器:”标题而不是一个。但它适用于所有其他标题。

4

2 回答 2

3

对于旧版本的 yaws(yaws-1.90 及以下),以下答案有效


现在,默认情况下,任何指定为[{header,"Server: MyOther Server Name"}]yaws 的标头都将在您的服务器标头值之前强制执行并标记其名称和版本,如下所示Server: Yaws 1.91, MyOther Server Name:当您在out/1函数中以标头值结尾时会发生这种情况,服务器如下所示:

out(_A)-> 
[{header,"Server: ASP.NET Server"},
{html,"<p>我喜欢 klacke 和 yaws !</p>"}]。

检查您的浏览器,使用 Firebug 您会看到指定如下的响应标头:

日期 2011 年 11 月 17 日星期四 07:59:17 GMT
内容长度 22
内容类型 text/html
服务器 Yaws 1.91,ASP.NET 服务器

现在解决办法

在yawssrc里面有一个模块叫yaws.erl。在这个模块中,检查 line: 1332,你会发现一个这样的函数:

make_server_header() ->
    HasDav = ?sc_has_dav(get(sc)),
    ["服务器:", (get(gc))#gconf.yaws, "\r\n" |
     如果 HasDav == true ->
             ["DAV: 1\r\n"];
        真->
             []
     结尾]。

这是将 yaws 版本和服务器名称附加到服务器标头指定值之上的一段代码。我们需要更改它并注释掉这些行并让它返回一个empty list [ ] orempty string "" 看起来像这样:

make_server_header() ->
    %%HasDav = ?sc_has_dav(get(sc)),
    %%["服务器:", (get(gc))#gconf.yaws, "\r\n" |
    %% 如果 HasDav == true ->
    %% ["DAV: 1\r\n"];
    %% 真->
    %% []
    %% 结尾]。
    []。%% 强制它只返回空

最后一步
现在我们需要重新编译这个模块并将现有的 yaws.beam 文件替换为YAWS-{VSN}/ebin我们在编译这个新源后得到的新生成的 .beam 文件。然后在虚拟机中重新加载它。我希望你能在最后一步找到自己的方式。解决这个问题的一种方法是更改​​运行 erlang shell 的 yaws 的当前工作目录

1> cd("PATH/TO/YAWS/src").
PATH/TO/YAWS/src
然后,在我们上面提到的改变 yaws.erl 的源之后执行这个(仍然在 yaws shell 中)
2> c(偏航)。
{好吧,打哈欠}

现在将生成的 yaws.beam 文件从 src 移动到 ebin。用来自 src 的文件覆盖/替换 ebin 中现有的 yaws.beam 文件

$ mv PATH/TO/YAWS/src/yaws.beam PATH/TO/YAWS/ebin/
因此,如果 yaws 正在运行,请通过在其 shell 中输入来重新加载该代码:

3> l(偏航)。


对于较新版本的 yaws(yaws-1.91 及更高版本)


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

server_signature = "MY SERVER SIGNATURE"

,因此标题将附带Server: MY SERVER SIGNATURE

于 2011-11-17T08:24:04.703 回答
2

从 2011 年 5 月发布的 Yaws 1.90 版开始,您可以设置全局配置变量server_signature来自定义ServerHTTP 响应标头。在撰写本文时,我们还在为server_signature每个虚拟服务器提供可覆盖的过程,因此您可以根据需要提供Server来自不同虚拟服务器的不同标头。此更改将在 2012 年 2 月上旬添加到yaws github 存储库中,并且稍后将在我们决定发布时出现在 Yaws 1.93 中。

于 2012-02-02T14:50:31.140 回答