答案 0 :(得分:6)
Aristos link中的评论为“为什么”提供了良好的答案。
归结为MS不想轻易让人们修改这个值。无论是出于营销还是其他目的,都可以进行解释。
从讨论中拿走的一件事是修改服务器头对任何安全性都没有用。有许多方法可以准确地检测出正在运行的Web服务器软件的类型(和版本)。
这使我们只有一个理由:保存字节。除非你正在运行一个极高的流量站点,否则这不是一个问题。如果您正在运行高流量站点,那么您很可能已经在运行一个或多个自定义模块。
答案 1 :(得分:2)
这个例子并没有真正删除“server”标题,只是在其上写了一些东西。
更好的标题是“ IIS7如何发送自定义”服务器“http标头”。阅读此类似文章http://blogs.technet.com/b/stefan_gossner/archive/2008/03/12/iis-7-how-to-send-a-custom-server-http-header.aspx
现在,如果您想知道为什么会这样,这不是唯一的方法,您可以转到您的网络服务器,只是从首字母标题中删除它。
如果您想知道,为什么要使用IHttpModule + PreSendRequestHeader,因为这是您在初始部分抓取标题并在iis执行之前首先放置“server”标题的方式。
希望得到这个帮助。
答案 2 :(得分:1)
您还可以通过在IIS 7 +中的web.config文件中添加outboundRule来清空值:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<rewrite>
<outboundRules rewriteBeforeCache="true">
<rule name="Remove Server header">
<match serverVariable="RESPONSE_Server" pattern=".+" />
<action type="Rewrite" value="" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
答案 3 :(得分:0)
删除这些标题的基本思路如下
答案 4 :(得分:0)
以下内容对我有用:
在IIS 10.0(Windows Server 2016/2019)中,可以通过在web.config system.webServer节点中配置requestFiltering来删除服务器标头:
<security>
<requestFiltering removeServerHeader ="true" />
</security>
这样,您就不必摆弄复杂的出站重写规则。
要删除ASP.NET的X-Powered-By标头,您仍然需要如上所述的customHeaders部分。
来源:https://www.saotn.org/remove-iis-server-version-http-response-header/
答案 5 :(得分:-1)
Response.Headers.Set("Server", "My Awesome Server");
在页面代码隐藏中正常工作,只要您的应用程序池设置为“集成管道模式”。
基本上,IPM专门用于将IIS管道与ASP.NET管道集成以允许完成此类操作。请参阅Mehrdad Afshari's Answer进行讨论。