Программный способ заключается в использовании модуль HTTP, что-то вроде этого (на основе SO answer by Luke):
namespace HttpModules
{
using System;
using System.Web;
public class RemoveExtraneousHeaderModule : IHttpModule
{
/// <summary>
/// Initializes a module and prepares it to handle requests.
/// </summary>
/// <param name="context">Provides access to the request context.</param>
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += this.OnPreSendRequestHeaders;
}
/// <summary>
/// Disposes of the resources (other than memory) used by this module.
/// </summary>
public void Dispose()
{
}
/// <summary>
/// Event raised just before ASP.NET sends HTTP headers to the client.
/// </summary>
/// <param name="sender">Event source.</param>
/// <param name="e">Event arguments.</param>
protected void OnPreSendRequestHeaders(object sender, EventArgs e)
{
NameValueCollection headers = HttpContext.Current.Response.Headers;
headers.Remove("Server");
headers.Remove("ETag");
headers.Remove("X-Powered-By");
headers.Remove("X-AspNet-Version");
headers.Remove("X-AspNetMvc-Version");
}
}
}
Модуль получает установленный через web.config, под <system.web>
для IIS 6 и под <system.webServer>
для IIS 7.
Спасибо, это полезно. Тем не менее, для IIS неэффективно добавлять заголовки, после чего некоторые коды удаляют их снова. Я бы предпочел удалить их «у источника». Любые яркие идеи? IIS не делает это легким. –
Эти заголовки добавлены кодом ядра IIS, дизайн которого не раскрывает функциональные возможности так же, как и Apache. Использование такого модуля очень быстро, возможно, быстрее, чем функция управления заголовком более низкого уровня. – devstuff
Вполне согласен. Я исследовал удаление заголовков с использованием фильтра Isapi, но это казалось тайным, и об этом мало информации. Недавно мы приняли Akamai в качестве сети доставки контента, я занимаюсь манипулированием заголовками на этом уровне, что дает более подробный контроль. По существу, проблема все еще является недостатком контроля в IIS. –