Скотт Митчелл в своем блоге предлагает решения для удаления ненужных заголовков .
Как уже было сказано здесь, в других ответах, для Serverзаголовка существует решение модуля http или решение web.config для IIS 10+ , или вы можете использовать URLRewrite вместо его гашения .
Наиболее практичным решением для установки обновленной версии (IIS 10+) является использование removeServerHeaderфайла web.config:
<system.webServer>
...
<security>
<requestFiltering removeServerHeader="true" />
</security>
...
</system.webServer>
Для X-AspNet-Versionи X-AspNetMvc-Versionон предлагает лучший способ, чем удаление их при каждом ответе: просто не генерировать их вообще.
Используйте enableVersionHeaderдля отключения X-AspNet-Versionв web.config
<system.web>
...
<httpRuntime enableVersionHeader="false" />
...
</system.web>
Используйте MvcHandler.DisableMvcResponseHeaderв событии .Net Application_Start для отключенияX-AspNetMvc-Version
MvcHandler.DisableMvcResponseHeader = true;
И, наконец, удалите в конфигурации IIS X-Powered-Byнастраиваемый заголовок в web.config.
<system.webServer>
...
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
Остерегайтесь, если у вас есть ARR (маршрутизация запросов приложений), он также добавит свой собственный X-Powered-By, который не будет удален настройками пользовательских заголовков. Его нужно удалить через диспетчер IIS, конфигурацию редактора в корне IIS (не на сайте): перейдите к system.webServer/proxyузлу и установите arrResponseHeaderзначение false. После IISReset, это учитывается.
(Я нашел это здесь , за исключением того, что этот пост посвящен старому способу настройки IIS 6.0.)
Не забывайте, что решение по коду приложения не применяется по умолчанию к заголовку, сгенерированному для статического содержимого (вы можете активировать его runAllManagedModulesForAllRequestsдля его изменения, но при этом все запросы будут запускаться .Net pipeline). Это не проблема, X-AspNetMvc-Versionпоскольку он не добавляется к статическому контенту (по крайней мере, если статический запрос не выполняется в конвейере .Net).
Боковое примечание: когда цель состоит в том, чтобы скрыть используемую технологию, вы также должны изменить стандартные имена файлов cookie .Net ( .ASPXAUTHесли формы активированы (использовать nameатрибут в formsтеге в web.config), ASP.NET_SessionId(использовать <sessionState cookieName="yourName" />в web.config в system.webтеге), __RequestVerificationToken(изменить его по коду с AntiForgeryConfig.CookieName, но, к сожалению, не относится к скрытому вводу, который эта система генерирует в html)).