Как включить сжатие gzip при использовании MVC3 в IIS7?
Кто-нибудь знает, как включить сжатие gzip в MVC 3? Я использую IIS7.
Результат аудита Google Chrome:
- Включить сжатие gzip (4)
- Сжатие следующих ресурсов с помощью gzip может уменьшить их размер передачи примерно на две трети (~ 92,23 КБ):
- /mydomain/может сэкономить ~ 1.53 КБ
- jquery-1.4.4.min.js может сэкономить ~ 51.35KB
- Cufon.js может сэкономить ~ 11.89KB
- Futura.js может сэкономить ~ 27.46KB
Ответы
Ответ 1
Вы можете настроить сжатие в файле web.config
следующим образом:
<system.webServer>
<urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>
Вы можете найти документацию этого элемента конфигурации в iis.net/ConfigReference. Это эквивалентно:
- Открытие информационных служб Интернета (диспетчер IIS)
- Перемещение по древовидной структуре слева, пока вы не достигнете виртуального каталога, который вы хотите изменить.
- Выбор соответствующего виртуального каталога, чтобы заголовок правой панели стал именем указанного виртуального каталога.
- Выбор "Сжатие" в разделе "IIS" в правой панели
- Выбор обоих вариантов и выбор "Применить" в разделе "Действия" в крайнем правом углу.
Примечание. (Как указано в комментариях) Вам необходимо убедиться, что Http Dynamic Compression установлено, иначе установка doDynamicCompression="true"
не будет иметь никакого эффекта. Самый быстрый способ сделать это:
- Пуск > Тип
optionalfeatures
(это самый быстрый способ войти в окно "Включить или отключить Windows" )
- Перейдите в Internet Information Services > World Wide Web Services > Функции производительности в дереве "Свойства Windows"
- Убедитесь, что отмечено "Динамическое сжатие содержимого"
- Нажмите "ОК" и подождите, пока Windows установит компонент
Ответ 2
Вы можете сделать это в коде, если хотите это сделать. Я бы сделал базовый контроллер, который каждый элемент управления наследует и украшает его этим атрибутом ниже.
public class CompressAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(encodingsAccepted)) return;
encodingsAccepted = encodingsAccepted.ToLowerInvariant();
var response = filterContext.HttpContext.Response;
if (encodingsAccepted.Contains("deflate"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}
else if (encodingsAccepted.Contains("gzip"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
}
}
}
Ответ 3
Сжатие включено/отключено на уровне сервера. См. Модуль сжатия IIS в консоли управления iis.
Вот инструкции для IIS с сайта microsoft.