Я включил сжатие динамического содержимого в IIS 7, но Fiddler показывает, что мои динамические страницы по-прежнему обслуживаются без кодирования содержимого: gzip.
Сжатие статического содержимого работает нормально на одних и тех же серверах.
Не уверен, имеет ли это значение, но большинство динамических страниц являются страницами coldfusion (Coldfusion настроен как расширение ISAPI), и мы также используем модуль перезаписи URL-адресов IIS.
Это из моего applicationhost.config.
<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 doDynamicCompression="true" />
Вот пример запроса:
GET / HTTP/1.1
Host: web5.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
и заголовок ответа:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
Server: Microsoft-IIS/7.0
...
Date: Mon, 22 Feb 2010 20:59:36 GMT
«Content-Endcoding: chunked» никогда не должно появляться в ответе сервера. "Chunked" - это полностью отдельная часть спецификации HTTP, "Transfer-Encoding". Вам следует искать «Content-Encoding: gzip», возможно, в дополнение к «Transfer-Encoding: chunked». Вот пример с домашней страницы Google:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Date: Wed, 17 Feb 2010 13:43:22 GMT
Expires: Wed, 17 Feb 2010 13:43:22 GMT
Cache-Control: private, must-revalidate, max-age=0
Last-Modified: Wed, 17 Feb 2010 13:43:22 GMT
Server: igfe
Transfer-Encoding: chunked
Content-Encoding: gzip
Теперь, что касается отладки вашей проблемы, IIS7 сжимает на основе типа содержимого. Поэтому, когда он видит «Content-Type: text / html», он сжимает страницу. Итак, сначала убедитесь, что ваши скрипты возвращают тип контента, который IIS считает сжимаемым (text / *).
Кроме того, IIS не сжимает страницу по умолчанию для запроса HTTP / 1.0 (используется некоторыми прокси, такими как Squid) или заголовков, которые указывают, что запрос поступил с прокси-сервера (Via: или X-Forwarded-For :). Это консервативный вариант по умолчанию для работы с большим количеством старых прокси, которые не обрабатывают сжатый HTTP-контент должным образом. Вы можете изменить это поведение, отредактировав файлы конфигурации IIS (на уровне сервера или сайта).
Наконец, убедитесь, что ваш клиент отправляет заголовки «Accept-Encoding: gzip» по запросу. Если это стандартный браузер, он будет работать по умолчанию, но если вы используете wget или какой-либо другой инструмент, это может быть не так. Ты можешь использовать Скрипач чтобы увидеть весь HTTP-диалог, включая заголовки и данные.
Вы можете выполнить шаги по устранению неполадок, упомянутые здесь. СЖАТИЕ HTTP в IIS 6 и IIS 7 с использованием учетной записи службы
ИСПОЛЬЗУЙТЕ NOTEPAD для редактирования applicationHost.config. Я потратил несколько часов, прежде чем понял, что мои изменения, сделанные в блокноте ++ (а также в редакторе Visual Studio 2010 !!), не применяются IIS.
Альтернативный способ добавить дополнительный mimeType в коллекцию dynamicTypes / staticTypes - использовать appcmd. "C:\Windows\System32\Inetsrv\Appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/javascript',enabled='True']" /commit:apphost
И снова: после внесения этих изменений вы увидите их только в блокноте. Notepad ++ (а также редактор Visual Studio 2010 !!) поддерживает какую-то чертову альтернативную реальность / хранилище для applicationHost.config. Он показывает вам его собственную версию файла (отличную от той, которую вы видите в блокноте) даже после того, как файл был отредактирован в блокноте и повторно открыт в np ++ / VS.
Проведя небольшое исследование, я обнаружил этот это указывает на то, что сжатие также необходимо включить на стороне Coldfusion, когда он генерирует HTML из шаблона. Я не могу найти точный источник, но, если я правильно помню, динамическое сжатие нацелено на ASP.Net и PHP, но для последнего его также необходимо включить в структуре PHP.
Поэтому я предполагаю, что причина, по которой вы не видите, что происходит сжатие, заключается в том, что его необходимо включить на стороне генератора, в данном случае Coldfusion.