Скотт Мітчелл пропонує в блозі повідомлення про рішення для видалення непотрібних заголовків .
Як вже було сказано в інших відповідях, для 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 (Application Request Routing), він також додасть свій власний X-Powered-By, який не буде видалено налаштуваннями користувацьких заголовків. Це потрібно видалити через диспетчер IIS, конфігурацію редактора в корені IIS (не на сайті): перейдіть до system.webServer/proxyвузла та встановіть arrResponseHeaderна false. Після цього IISResetвін враховується.
(Я знайшов цю, тут , крім цієї публікації, йдеться про старий спосіб налаштування речей IIS 6.0.)
Не забувайте, що рішення за допомогою коду програми не застосовується за замовчуванням до заголовка, створеного на статичному вмісті (ви можете активувати runAllManagedModulesForAllRequestsзміни для цього, але це призводить до запуску всіх запитів .Net). Це не є проблемою, X-AspNetMvc-Versionоскільки він не додається до статичного вмісту (принаймні, якщо статичний запит не виконується в конвеєрі .Net).
Побічна примітка: коли мета закрити використану технологію, ви також повинні змінити стандартні імена файлів cookie .Net ( .ASPXAUTHякщо форми активовано auth (використання nameатрибута на formsтегу в web.config), ASP.NET_SessionId(використання <sessionState cookieName="yourName" />в system.webтезі web.config ), __RequestVerificationToken(змінити його за кодом з AntiForgeryConfig.CookieName, але, на жаль, не стосується прихованого вводу, який ця система генерує у html)).