Скотт Мітчелл пропонує в блозі повідомлення про рішення для видалення непотрібних заголовків .
Як вже було сказано в інших відповідях, для 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)).