2010-10-11 4 views

Répondre

7

Une façon programmatique est d'utiliser un module HTTP, quelque chose comme ça (basé sur un 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"); 
     } 
    } 
} 

Le module est installé via web.config, sous <system.web> pour IIS 6 et sous <system.webServer> pour IIS 7.

+0

Merci, qui est utile. Cependant, il semble inefficace pour IIS d'ajouter les en-têtes, puis d'avoir du code pour les supprimer à nouveau. Je préférerais vraiment les supprimer 'à la source'. Des idées brillantes? IIS ne rend pas cela facile. –

+0

Ces en-têtes sont ajoutés par le code de base IIS, dont la conception n'expose pas la fonctionnalité de la même manière qu'Apache. L'utilisation d'un module comme celui-ci est très rapide, probablement plus rapide que d'avoir une fonction de gestion d'en-tête de niveau inférieur. – devstuff

+1

Tout à fait d'accord. J'ai enquêté sur la suppression des en-têtes à l'aide d'un filtre Isapi, mais cela semblait obscur et il y a peu d'informations à ce sujet. Nous avons récemment adopté Akamai en tant que réseau de diffusion de contenu. Je cherche à manipuler les en-têtes à ce niveau, ce qui donne un contrôle plus granulaire. Essentiellement, le problème est toujours un manque de contrôle dans IIS. –