2010-10-11 5 views
4

Знаете ли вы, что вы можете prevent the revalidation of files in browser cache and subsequent 304 response, полностью удалив заголовки ответов ETag и Last-Modifed?Удалить заголовки Etag и Last-Modified от IIS

Конечно, это легко в Apache, но так же ясно, как грязь в IIS 6. Кто-нибудь знает, как удалить оба этих заголовка в IIS?

ответ

7

Программный способ заключается в использовании модуль 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.

+0

Спасибо, это полезно. Тем не менее, для IIS неэффективно добавлять заголовки, после чего некоторые коды удаляют их снова. Я бы предпочел удалить их «у источника». Любые яркие идеи? IIS не делает это легким. –

+0

Эти заголовки добавлены кодом ядра IIS, дизайн которого не раскрывает функциональные возможности так же, как и Apache. Использование такого модуля очень быстро, возможно, быстрее, чем функция управления заголовком более низкого уровня. – devstuff

+1

Вполне согласен. Я исследовал удаление заголовков с использованием фильтра Isapi, но это казалось тайным, и об этом мало информации. Недавно мы приняли Akamai в качестве сети доставки контента, я занимаюсь манипулированием заголовками на этом уровне, что дает более подробный контроль. По существу, проблема все еще является недостатком контроля в IIS. –