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….


dotnetomaniak.plNajciekawsze artykuły o .NET