Я включил динамическое сжатие контента в 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
решение1
Вы можете выполнить действия по устранению неполадок, указанные здесь.СЖАТИЕ HTTP в IIS 6 и IIS 7 с использованием учетной записи службы
решение2
"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-диалог, включая заголовки и данные.
решение3
Проведя небольшое исследование, я обнаружил,этотэто означает, что сжатие также должно быть включено на стороне Coldfusion, когда он генерирует HTML из шаблона. Я не могу найти точный источник, но если я правильно помню, динамическое сжатие нацелено на ASP.Net и PHP, но для последнего его все еще нужно включить в PHP-фреймворке.
Поэтому я предполагаю, что причина, по которой вы не видите компрессию, заключается в том, что ее необходимо включить на стороне генератора, в данном случае Coldfusion.
решение4
ИСПОЛЬЗУЙТЕ БЛОКНОТ для редактирования applicationHost.config.Я потратил несколько часов, прежде чем понял, что мои изменения, внесенные в Notepad++ (а также в редакторе 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.