gpt4 book ai didi

erlang - 更改雅司病响应中的特定 header

转载 作者:行者123 更新时间:2023-12-02 08:46:27 25 4
gpt4 key购买 nike

我想在雅司病中动态更改http header “服务器:”值(在构建响应时)。我尝试过:-

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

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

最佳答案

对于旧版本的雅司病(yaws-1.90 及更低版本),下面的答案有效


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

out(_A)-> 
[{header,"Server: ASP.NET Server"},
{html,"<p>I love klacke and yaws ! </p>"}].

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

Date            Thu, 17 Nov 2011 07:59:17 GMTContent-Length  22Content-Type    text/htmlServer          Yaws 1.91, ASP.NET Server

现在是解决方案:

在 yaws src 中,有一个名为 yaws.erl 的模块。在这个模块中,检查行:1332,你会发现这样的函数:

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].

这段代码将雅司病版本和服务器名称附加到服务器 header 指定值的顶部。我们需要更改它并注释掉这些行,并让它返回一个空列表[]空字符串“”,如下所示:

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-{VSN}/ebin 中现有的 yaws.beam 文件替换为编译此新源后得到的新结果 .beam 文件。然后将其重新加载到虚拟机中。我希望你能在最后一步找到自己的方法。实现此目的的一种方法是更改​​运行 erlang shell 的 yaws 的当前工作目录

1> cd("PATH/TO/YAWS/src").PATH/TO/YAWS/src
然后,在更改 yaws.erl 的源之后执行此操作(仍在 yaws shell 中),正如我们上面提到的
2> c(yaws).{ok,yaws}

现在将生成的 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"

因此 header 将带有 Server: MY SERVER SIGNATURE

关于erlang - 更改雅司病响应中的特定 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8162933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com