Увімкнути IIS7 gzip


229

Як я можу дозволити IIS7 gzip статичні файли, такі як js та css, і як я можу перевірити, чи IIS7 дійсно gziping їх перед відправкою клієнту?

Відповіді:


243

Конфігурація

Ви можете включити стиснення GZIP повністю у вашому Web.configфайлі. Це особливо корисно, якщо ви перебуваєте на спільному хостингу та не можете налаштувати IIS безпосередньо, або якщо ви хочете, щоб ваша конфігурація передавалася між усіма середовищами, на які ви орієнтовані.

<system.webServer>
  <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
    <dynamicTypes>
      <add mimeType="text/*" enabled="true"/>
      <add mimeType="message/*" enabled="true"/>
      <add mimeType="application/javascript" enabled="true"/>
      <add mimeType="*/*" enabled="false"/>
    </dynamicTypes>
    <staticTypes>
      <add mimeType="text/*" enabled="true"/>
      <add mimeType="message/*" enabled="true"/>
      <add mimeType="application/javascript" enabled="true"/>
      <add mimeType="*/*" enabled="false"/>
    </staticTypes>
  </httpCompression>
  <urlCompression doStaticCompression="true" doDynamicCompression="true"/>
</system.webServer>

Тестування

Щоб перевірити, чи працює компресія чи ні, використовуйте інструменти для розробників у Chrome або Firebug для Firefox та переконайтеся, що встановлено заголовк відповіді HTTP:

Content-Encoding: gzip

Зауважте, що цей заголовок не буде присутній, якщо код відповіді 304 (Не змінено). Якщо це так, зробіть повне оновлення (утримуйте зміну або управління, натиснувши кнопку оновлення) і перевірте ще раз.


@DenNukem, вибач, я не дуже впевнений. Я тестував це лише на IIS7. Хтось ще хотів коментувати?
Дрю Ноакс

21
Остерігайтеся - він працює лише в тому випадку, якщо розділ httpCompression в applicationhost.config розблокований. За замовчуванням розділ блокується для модифікацій, тому переосмислення в web.config не працює. На це витрачали кілька годин. stackoverflow.com/a/2894695/245460 , дивіться коментарі нижче.
Карел Крал

Переконайтеся, що в ньому встановлена ​​функція Web Role, а також з MSDN: "Ви також можете додавати записи підстановки для типів MIME. Однак ви можете встановити типи MIME лише для рівня веб-сервера. Наприклад, щоб увімкнути статичну компресію для всі типи MIME для веб-сайту за замовчуванням, спочатку додайте записи підстановки для типів MIME для рівня сервера, а потім увімкніть статичну компресію для веб-сайту за замовчуванням. "
Люк Пуплетт

12
Динамічне стиснення також не буде працювати, якщо у вас на сервері не встановлений модуль стиснення динамічного вмісту (це можна отримати через інсталятор веб-платформи). Це вам знадобиться, якщо ви використовуєте пакети Css / Js.
Марк

тільки css стискається, .jsні. Також спробували додати application/x-javascript. Використовуючи разом з tomcat, звідси видалили directoryпараметр.
coding_idiot

58

Вам потрібно буде включити цю функцію на панелі керування функцій Windows:

Скріншот функції IIS


16
У Windows Server 2008 R2 він розміщений у розділі Менеджер серверів> Ролі> Веб-сервер (IIS). Натисніть "Додати рольові послуги" у розділі "Ролі". "Динамічне стиснення вмісту" вказано у заголовку "Продуктивність".
Джонатан Літтл

37

Глобальний Gzip в HttpModule

Якщо у вас немає доступу до остаточного примірника IIS (спільного хостингу ...), ви можете створити HttpModule, який додає цей код до кожної події HttpApplication.Begin_Request:

HttpContext context = HttpContext.Current;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
HttpContext.Current.Response.Cache.VaryByHeaders["Accept-encoding"] = true;

Тестування

Кудо, жодне рішення не робиться без тестування. Мені подобається використовувати плагін Firefox " Liveheaders ", він показує всю інформацію про кожне повідомлення HTTP між браузером та сервером, включаючи стиснення, розмір файлу (який можна порівняти з розміром файлу на сервері).


3
Я використовую спільний хостинг і мені не потрібно було писати жодного коду, щоб увімкнути компресію виходу GZIP. Це було можливо лише через Web.config. Дивіться мою відповідь: stackoverflow.com/questions/702124/enable-iis7-gzip/…
Дрю Ноакс

2
Перші три рядки я розмістив на початку однієї сторінки aspx, яку я хотів стиснути, і вона працює! Дякую! Це набагато менше клопоту, ніж будь-який інший підхід, і він працює на IIS 6 для мене.
DenNukem

1
Це абсолютно спосіб зробити це.
Меттью Джеймса Девіса


2

Мені потрібно було лише додати функцію у функції Windows, як згадував Чарлі. Для людей, які не можуть її знайти на вікні 10 або сервері 2012+, знайдіть її, як показано нижче. Я трохи боровся

Windows 10

введіть тут опис зображення

Windows Server 2012 R2

введіть тут опис зображення

віконний сервер 2016

введіть тут опис зображення


1

Якщо ви використовуєте YSlow з Firebug і аналізуєте їх ефективність, YSlow неодмінно підкаже, які артефакти на вашій сторінці не gzip'd!





Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.