Включить IIS7 GZIP
Как я могу включить IIS7 для распаковки статических файлов, таких как js и css, и как я могу проверить, действительно ли IIS7 распаковывает их перед отправкой клиенту?
10 ответов
конфигурация
Вы можете включить сжатие 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 (не изменен). Если это так, выполните полное обновление (удерживайте нажатой клавишу Shift или элемент управления, пока вы нажимаете кнопку обновления) и проверьте снова.
Вам нужно будет включить эту функцию на панели управления функциями Windows:
Глобальный 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-сообщении между браузером и сервером, включая сжатие, размер файла (который можно сравнить с размером файла на сервере).
Мне только нужно было добавить функцию в функции Windows, как упоминал Чарли. Для людей, которые не могут найти ее в Windows 10 или сервере 2012+, найдите ее, как показано ниже. Я немного боролся
Windows 10
Windows Server 2012 R2
оконный сервер 2016
Если вы используете YSlow с Firebug и анализируете производительность своей страницы, YSlow наверняка сообщит вам, какие артефакты на вашей странице не являются gzip'd!
Если вы также пытаетесь сжать динамические страницы (например, aspx) и он не работает, вероятно, это потому, что эта опция не включена (вам нужно установить модуль динамического сжатия содержимого с помощью функций Windows):
http://support.esri.com/en/knowledgebase/techarticles/detail/38616
Еще один простой способ тестирования без установки чего-либо, также он не зависит от версии IIS. Вставьте свой URL по этой ссылке - SEO Checkup
Чтобы добавить в web.config: http://www.iis.net/configreference/system.webserver/httpcompression
Попробуйте Firefox с установленными аддонами Firebug. Я использую это; отличный инструмент для веб-разработчика.
Я также включил сжатие Gzip в IIS7, используя web.config.