Czasem, gdy walczymy o jak najszybszy czas odpowiedzi naszej strony musimy optymalizować jej dość dziwne elementy.
W najnowszym magazynie .Net Curry autor, Omar AL Zabir w artykule zatytułowanym “Essential it admin skills for .net developers” w jednym z punktów pokazuje jak pozbyć się dodatkowych nagłówków wysyłanych przez IIS a dodawanych czy to przez niego samego czy też ASP.NET.
Idea szczytna – każdy dodatkowy bajt kosztuje nas jakiś tam ułamek czasu zarówno po stronie serwera jak i przeglądarki. Jednakże, drogi autorze, jakby to powiedział Krzysztof Koźmic, “you are doing it wrong”. Zaprezentowany w magazynie kod:
public class RemoveASPNETStuff : IHttpModule
{
public void Init(HttpApplication app)
{
app.PostReleaseRequestState += app_PostReleaseRequestState;
}
void app_PostReleaseRequestState(object sender, EventArgs e)
{
var headers = HttpContext.Current.Response.Headers;
headers.Remove(“Server”);
headers.Remove(“X-AspNet-Version”);
headers.Remove(“ETag”);
}
}
usuwa nagłówki za pomocą dodatkowego modułu HTTP wpiętego w cały układ przetwarzający zapytania IIS. Działać działa ale da się “prościej”…
Jakie nagłówki są wysyłane
Domyślnie, nasza aplikacja MVC (4), do każdej odpowiedzi dokleja następujące nagłówki:
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 4.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Sporo tego biorąc pod uwagę, że są one całkowicie nieprzydatne :). Zobaczmy jak się możemy ich pozbyć.
X-Powered-By wystarczy usunąć z poziomu IISa:
Kolejny tj. X-AspNetMvc-Version usuniemy dodając następującą linijkę w naszym Application_Start w Global.asax
MvcHandler.DisableMvcResponseHeader = true;
Kilka bajtów mniej…:)
Trzeci odpadnie jak ustawimy atrybut enableVersionHeader=”false” na węźle httpRuntime w naszym web.configu.
Został nam już tylko Server i ETag. Ten ostatni domyślnie nie jest wysyłany a ten pierwszy? Cóż…na niego niestety nie znalazłem ładnego/prostszego rozwiązania – trzeba dodatkowym modułem 🙂
To może jednak już lepiej wszystko modułem?
Ktoś może zapytać. Skoro tak trzeba grzebać i każdy nagłówek konfigurować w innym miejscu to może jednak lepiej modułem usunąć wszystkie razem? Można, ale… minus takiego rozwiązania jest taki, że ASP.NET do naszego response’a już te nagłówki doda a dopiero później my je usuniemy. Po co ma to robić skoro od razu wiemy, że ich potrzebować nie będziemy? Lepiej wyłączyć je wcześniej – zaoszczędzimy i na ich tworzeniu i dodawaniu do obiektu odpowiedzi….
– Najciekawsze artykuły o .NET
Founder of Octal Solutions a .NET software house.
Passionate dev, blogger, occasionally speaker, one of the leaders of Wroc.NET user group. Microsoft MVP. Podcaster – Ostrapila.pl