作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在雅司病中动态更改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"
Server: MY SERVER SIGNATURE
关于erlang - 更改雅司病响应中的特定 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8162933/
我是一名优秀的程序员,十分优秀!