¿Cómo habilitar la compresión de contenido dinámico de iis 7?

¿Cómo habilitar la compresión de contenido dinámico de iis 7?

He activado la compresión de contenido dinámico en IIS 7, pero Fiddler muestra que mis páginas dinámicas todavía se muestran sin codificación de contenido: gzip.

La compresión de contenido estático funciona bien en los mismos servidores.

No estoy seguro si importa, pero la mayoría de las páginas dinámicas son páginas de Coldfusion (Coldfusion está configurada como una extensión ISAPI) y también estamos usando el módulo de reescritura de URL de IIS.

Esto es de mi 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" />

Aquí hay una solicitud de muestra:

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

y encabezado de respuesta:

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

Respuesta1

Puede seguir los pasos de solución de problemas mencionados aquí.COMPRESIÓN HTTP en IIS 6 e IIS 7 usando la cuenta de servicio

Respuesta2

"Content-Endcoding: fragmentado" nunca debería aparecer en una respuesta del servidor. "Chunked" es una parte completamente separada de la especificación HTTP, "Codificación de transferencia". Deberías buscar "Codificación de contenido: gzip", potencialmente además de "Codificación de transferencia: fragmentado". Aquí hay un ejemplo de la página de inicio de 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

Ahora, en lo que respecta a la depuración de su problema, IIS7 comprime según el tipo de contenido. Entonces, cuando ve "Tipo de contenido: texto/html", comprime la página. Primero, asegúrese de que sus scripts devuelvan un tipo de contenido que IIS considere comprimible (texto/*).

Además, IIS no comprimirá la página de forma predeterminada para una solicitud HTTP/1.0 (utilizada por algunos servidores proxy como Squid) o encabezados que indiquen que la solicitud proviene de un servidor proxy (Via: o X-Forwarded-For:). Este es un valor predeterminado conservador para lidiar con la gran cantidad de servidores proxy antiguos que no manejan el contenido HTTP comprimido correctamente. Puede anular este comportamiento editando los archivos de configuración de IIS (ya sea a nivel de servidor o de sitio).

Finalmente, asegúrese de que su cliente envíe encabezados "Accept-Encoding: gzip" en la solicitud. Si es un navegador estándar, lo será de forma predeterminada, pero si está utilizando wget o alguna otra herramienta, es posible que no. Puedes usarViolinistapara ver toda la conversación HTTP, incluidos encabezados y datos.

Respuesta3

Investigando un poco encontréesteeso indica que la compresión también debe habilitarse en el lado de Coldfusion cuando genera el HTML a partir de una plantilla. No puedo encontrar la fuente exacta, pero si no recuerdo mal, la compresión dinámica está dirigida a ASP.Net y PHP, pero para este último también debe estar habilitada en el marco de PHP.

Por lo tanto, supongo que la razón por la que no ves que se produce la compresión es porque es necesario habilitarla en el lado del generador, en este caso Coldfusion.

Respuesta4

UTILICE EL BLOQUE DE NOTAS para editar applicationHost.config.He perdido varias horas antes de comprender que IIS no aplica los cambios realizados en notepad++ (¡así como en el editor de Visual Studio 2010!).

Una forma alternativa de agregar mimeType adicional a la colección de tipos dinámicos/tipos estáticos es usar appcmd."C:\Windows\System32\Inetsrv\Appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/javascript',enabled='True']" /commit:apphost

Y nuevamente: después de realizar estos cambios, los verá solo en el Bloc de notas. Notepad++ (¡así como el editor Visual Studio 2010!!) mantiene algún tipo de realidad/almacenamiento alternativo para applicationHost.config. Le muestra su propia versión del archivo (diferente de la que ve en el bloc de notas) incluso después de editar el archivo en el bloc de notas y volver a abrirlo en np++/VS.

información relacionada