Убираем ненужные http-заголовки из ASP.NET

Original author: Scott Mitchell
  • Translation
В связи с последними инициативами Гугла, размер веб-страницы и скорость ее загрузки стали вновь актуальны. Скорость загрузки контента становится одним из критериев ранжирования результатов поиска. О GZip и Deflate сжатии написано уже много, о серверном кешировании — тоже. Поговорим о заголовках.

Итак, ваше ASP.NET-приложение, помимо прочих, шлет на клиент следующие заголовки (значения могут варьироваться):
  • Server: Microsoft-IIS/6.0
  • X-Powered-By: ASP.NET
  • X-AspNet-Version: 2.0.50727
  • (опционально) X-AspNetMvc-Version: 1.0

Убрав эти header'ы мы «облегчим» траффик всего на какие-то 100 байт для каждого запроса, но, во-первых, следует помнить, что эти 100 байт, будучи умноженными на десятки тысяч запросов к вашему серверу, сыграют ощутимую роль. Во-вторых, отсуствие header'ов усложнит жизнь злоумышленникам, которые будут лишены информации о версии вашего сервера, версии ASP.NET и о платформе вообще.

Теперь к делу.


Убираем заголовок X-AspNet-Version.


Тут все просто. Достаточно добавить в web.config строку:

<httpRuntime enableVersionHeader="false" />


Убираем заголовок X-AspNetMvc-Version


Если вы используете фреймворк ASP.NET MVC, добавьте этот код в обработчик Application_Start в файле Global.asax:

MvcHandler.DisableMvcResponseHeader = true;


Убираем заголовок X-Powered-By


Запускаем оснастку администрирования IIS и идем на вкладку «service» в свойствах веб-сайта:

image

Если у вас IIS7 — все похоже:

image

Убираем заголовок Server


Тут все сложнее. Этот заголовок добавляет сама IIS, поэтому придется вычищать его «руками», с помощью небольшого хака, опять же, в Global.asax, в обработчике Application_PreSendRequestHeaders:

//все гениальное просто
HttpContext.Current.Response.Headers.Remove("Server");

К сожалению, это сработает только с включенной настройкой Integrated Pipeline Mode — читай — «только в IIS7». Для IIS6 придется прибегнуть к помощи бесплатной утилитки от Microsoft — UrlScan
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 12

    0
    Хедеры, блеять, хЕдеры — [ˊhedəɹ]
      0
      Obsolete since 15:30 :)
        +1
        да, поправил, спасибо :)
    • UFO just landed and posted this here
        0
        ViewState это признак WebForms, если они не используются Ваш способ не пригоден.
        • UFO just landed and posted this here
          +1
          //занудствую
          видим ViewState на 200кб…
            +1
            Замечу, что в ASP.NET MVC нет понятия ViewState.
            0
            Ну и в какое место Global.asax.cs я должен вставить этот код? (HttpContext.Current.Response.Headers.Remove(«Server»);)
            Если уж и перепечатываете статью Скотта Митчела то хоть без ошибок.
              0
              упс, сорри, не заметил, что это помечено как перевод. Но про Global.asax все равно не точно.
                0
                Поправил, спасибо. Сделал, как в оригинале. Хотя, эту строку кода (HttpContext.Current.Response.Headers.Remove(«Server»)) можно воткнуть много куда. Даже не обязательно в Global.asax, можно хоть в код отдельных страниц…
              0
              Убираем заголовок Server

              Тут все сложнее. Этот заголовок добавляет сама IIS, поэтому придется вычищать его «руками», с помощью небольшого хака, опять же, в Global.asax, в обработчике Application_PreSendRequestHeaders


              Не убирает заголовок со статики.

              Only users with full accounts can post comments. Log in, please.