我想在 yaws 中动态更改 http-header "Server:"值(在构建响应时)。我试过:-
[{status, 200},
{allheaders,
[{header,
["Server: ","ASP.NET Development Server/10.0.0.0"]
}]
},
{html,Body}
]
它返回两个 “服务器:”标题而不是一个。但它适用于所有其他标题。
我想在 yaws 中动态更改 http-header "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 的标头都将在您的服务器标头值之前强制执行并标记其名称和版本,如下所示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 年 5 月发布的 Yaws 1.90 版开始,您可以设置全局配置变量server_signature
来自定义Server
HTTP 响应标头。在撰写本文时,我们还在为server_signature
每个虚拟服务器提供可覆盖的过程,因此您可以根据需要提供Server
来自不同虚拟服务器的不同标头。此更改将在 2012 年 2 月上旬添加到yaws github 存储库中,并且稍后将在我们决定发布时出现在 Yaws 1.93 中。