Почему сжатие gzip не работает в IIS 8.5?

Я не могу заставить сжатие gzip работать в IIS 8.5 на машине Server 2012 R2. Я провел небольшое исследование и следовал инструкциям, приведенным в этих сообщениях:

  1. Как включить сжатие GZIP в IIS 7.5
  2. Сжатие в IIS 8.5 завершилось неудачно, указано ALREADY_CONTENT_ENCODING < / а>
  3. Сжатие GZip в IIS 7.5 не работает
  4. сжатие gzip не работает с IIS 8.5

Вот соответствующий раздел моей конфигурации:

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" staticCompressionIgnoreHitFrequency="true">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <!-- I have read that dynamic compression increases server CPU load.
    <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" />

Кроме того, в IIS я установил сжатие для всего, что превышает 256 байт. И я выполнил iisreset.

Тем не менее, я не вижу сжатия, упомянутого в моей консоли разработчика в Chrome или IE, а PageSpeed ​​по-прежнему говорит мне сжимать файлы. Какой простой шаг я пропустил?


person mrcoulson    schedule 21.07.2017    source источник


Ответы (3)


Будет сложно понять, что происходит, при условии, что вы выполнили все настройки IIS правильно.

  • Для проверки того, работает ли сжатие нормально или нет, как вы заходите на сайт. например Если вы используете полное доменное имя www.example.com, попробуйте использовать URL-адрес localhost. Это позволит убедиться, что ваши настройки IIS верны.
  • Если localhost работает нормально, а ваше полностью квалифицированное доменное имя не работает, проблема может быть в сети. Чтобы сжатие работало, браузер должен отправить заголовок запроса accept-encoding:gzip, deflate. во многих случаях ваш прокси или балансировщик нагрузки может обрезать этот заголовок, и этот заголовок может не попасть на сервер IIS. Таким образом, IIS никогда не сжимается, даже если все настройки выполнены правильно.

Чтобы проверить, что происходит с запросом и почему IIS не сжал запрос, вы можете сделать следующее.

  • убедитесь, что у вас есть Трассировка невыполненных запросов установлена.
  • Configure your Failed Request Definition
    • Go to Failed Request tracing Modules
    • Нажмите "Добавить" на боковой панели  Отслеживание невыполненного запроса
    • Включите Все содержание и установите статус 200–999.
    • И закончите настройку.
    • Теперь воспроизведите проблему, и вы получите следы, записанные в каталоге C: \ inetpub \ logs \ FailedReqLogFiles \ W3SVC.
    • Откройте файл трассировки (для каждого запроса будет создан один файл. Откройте файл трассировки в IE (убедитесь, что данные запроса соответствуют запросу, который вы хотите проверить) и перейдите в компактное представление  Компактный просмотр трассировки невыполненного запроса
    • Найдите сжатие, а также проверьте причину  Причина сбоя динамического сжатия
person Rohith    schedule 22.07.2017
comment
Я попробовал это, нашел один из файлов, который должен быть сжат, и я вижу, что деталь STATIC_COMPRESSION_NOT_SUCCESS - это Reason = NOT_FREQUENTLY_HIT. Следует ли этого избежать, потому что я установил staticCompressionIgnoreHitFrequency в своей конфигурации? - person mrcoulson; 24.07.2017
comment
ЧастыйHitThreshold - это предел, который применяется к правилу статического сжатия. Да, вы можете установить staticCompressionIgnoreHitFrequency, чтобы всегда сжимать - person Rohith; 24.07.2017
comment
Правильно. Я уже сделал это, но вижу, что он не сжимается. Есть ли что-то, что могло бы это переопределить? - person mrcoulson; 25.07.2017
comment
Попробуйте установить частыйHitThreshold на ноль и проверьте. staticCompressionIgnoreHitFrequency должен обрабатывать сжатие. Также compressin имеет минимальный размер файла. Таким образом, файл, который вы тестируете, должен быть больше минимального размера файла. После того, как все это проверило, что происходит в Failred request tracing compressing Reason - person Rohith; 25.07.2017

Как упоминалось в ответах на один из вопросов, на которые ссылается OP, обязательно проверьте наличие антивирусного программного обеспечения, работающего на сервере. В моем случае это был ESET. Ни один из параметров сжатия IIS не работал до тех пор, пока не были отключены соответствующие параметры ESET.

Я опускаю детали настроек - я сделал то, что выглядело как довольно простое отключение, и предоставил ИТ-специалистам выяснить, какие именно настройки лучше всего подходят для того, чтобы сжатие продолжало работать при сохранении безопасности.

person Tommy Hansen    schedule 19.02.2020

У меня была аналогичная проблема, вызванная странным поведением ESET. Это работало на некоторых машинах, но не на одной с eset, мне потребовалось время, чтобы осознать.

Случилось так, что ESET заставил Chrome понизить запросы http2 до http 1.1, а не сжимать их. Это можно увидеть, если открыть сеть и включить столбец «Протокол». После удаления eset он работал, даже если я заставил Chrome использовать http1.1 с флагом --disable-http2

В любом случае, если он все еще не работает, я бы попытался (в дополнение к другим ответам):

  • проверьте, ведут ли себя разные клиенты одинаково (в моем случае проблема была только на машине разработчика)
  • развернуть простой статический сайт (событие по умолчанию) и протестировать
  • переустановить iis
  • проверьте настройки в диспетчере серверов iss, в редакторе конфигурации / system.webServer / httpCompression collection, измените уровень сжатия
person eugen    schedule 18.09.2020