我知道如何Server
根据上面的链接使用 HTTP 模块删除响应标头。
我只是想知道为什么有必要以这种方式删除它。
Aristos 链接中的评论很好地回答了为什么。
归结为 MS 不想轻易让人们修改这个值。无论是出于营销目的还是其他目的,都可以解释。
从该讨论中删除的一件事是修改服务器标头对于任何类型的安全性都没有用。您可以通过多种方式准确检测正在运行的 Web 服务器软件的类型(和版本)。
这让我们只有一个理由这样做:节省字节。除非您正在运行一个非常高流量的网站,否则这不是问题。如果您正在运行一个高流量站点,那么您很可能已经在运行一个或多个自定义模块。
以下内容对我有用:
在 IIS 10.0 (Windows Server 2016/2019) 中,您可以通过在 web.config system.webServer 节点中配置 requestFiltering 来移除 Server 标头:
<security>
<requestFiltering removeServerHeader ="true" />
</security>
这样您就不必摆弄复杂的出站重写规则。
要删除 ASP.NET 的 X-Powered-By 标头,您仍然需要上面提到的 customHeaders 部分。
来源:https ://www.saotn.org/remove-iis-server-version-http-response-header/
这个例子并没有真正去掉“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
现在,如果您想知道为什么会这样,这不是唯一的一种方式,您可以访问您的 Web 服务器,然后将其从首字母标题中删除。
如果您想知道,为什么要使用 IHttpModule + PreSendRequestHeader,因为这是您在初始部分获取标头并在 iis 执行此操作之前首先放置“服务器”标头的方式。
希望这有帮助。
您还可以通过在 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>
Response.Headers.Set("Server", "My Awesome Server");
只要您的应用程序池设置为“集成管道模式”,就可以在页面代码隐藏中正常工作。
基本上,IPM 专门用于将 IIS 管道与 ASP.NET 管道集成以允许完成此类事情。请参阅Mehrdad Afshari 的回答进行讨论。