在 404 和 302 文件的情况下禁用 IIS 服务器响应标头



我使用以下自定义标头和重写规则来删除服务器响应标头IIS 8.5,但是当在Firefox或Chrome上打开网络监视器并指向状态为404(以及丢失的图像(或302(以及aspxerrorpath重定向中缺少目录或请求的文件(的任何文件时,我可以看到原始标头。

例如Microsoft网站隐藏了这些信息和标题,但访问这样的 URL 将让我轻松确定服务器和 IIS 版本:

服务器Microsoft-IIS/10.0

X-aspNet-Version4.0.30319

X 供电 ASP.NET

<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By-Plesk" />
<add name="Server" value="CustomName" />
</customHeaders>
</httpProtocol>
<rewrite>
<outboundRules rewriteBeforeCache="true">
<rule name="Remove Headers 1">
<match serverVariable="RESPONSE_Server" pattern=".+" />
<action type="Rewrite" value="" />
</rule>
<rule name="Remove Headers 2" patternSyntax="ExactMatch">
<match serverVariable="RESPONSE_SERVER" pattern=".*" />
<action type="Rewrite" value="" />
</rule>
</outboundRules>
</rewrite>  
</system.webServer>

有没有办法从 IIS 8.5 或 Web.Config 解决此问题,而不必从我的 ASP.NET C# 代码中执行此操作?

我不认为这是一个很好的答案,但这是一种潜在的解决方法,具体取决于您的站点配置。 IIS 8.5 的试验表明,在状态代码错误处理程序(即错误页响应(或 302 重定向上,出站重写规则被充分忽略,以响应服务器标头保留为默认值的错误状态。 但是,如果重定向到属于站点一部分的 URL,则会触发出站重写规则。

因此,web.config 中的类似内容将重定向到站点的根目录,并触发出站规则。







如果可以提供静态内容,则可以添加一个文件(例如/errors/404.htm(,然后相应地更改路径。 收到 404 错误时,将返回 404.htm 文件,并触发出站规则。 但是,请注意,每个错误状态都会有此问题,因此这将修复 404,但必须以类似的方式处理其他错误。

此问题的解决方案是添加 URL 重写规则,不是在 IIS 管理器中的站点级别,而是在服务器级别。 您也可以直接编辑位于 Web 服务器上 C:\Windows\System32\inetsrv\config\ 的 applicationHost.config 文件。 这两种方法中的任何一种都会将此规则级联到您在 IIS 中的每个站点。 在执行此操作之前,请确保删除您可能已为任何子站点添加的此重写规则,否则它将在服务器级别添加时复制该规则并导致错误。 我已经确认这在IIS 8.5中有效。

通过在web.config中的标签中添加"runAllManagedModulesForAllRequests="true",我能够删除默认404错误页面上的"Server: Microsoft-IIS/8.5"响应标头。 我必须为服务器上的每个站点执行此操作。 仅供参考,此解决方案未修复默认的400"错误请求"错误页面。

进行此更改后,我尚未测试性能。 其他人则表示,添加"runAllManagedModulesForAllRequests="true"可能会导致性能下降。

该解决方案取自 Rick Stral 的网站:https://weblog.west-wind.com/posts/2012/oct/25/caveats-with-the-runallmanagedmodulesforallrequests-in-iis-78

这是将其放入 web.config 文件的位置。

<system.webServer>
<modules runAllManagedModulesForAllRequests="true" >
...
</modules>  
</system.webServer> 

最新更新