¿Cómo puedo hacer que funcione la compresión gzip en IIS7?

He instalado la compresión estática y dinámica para IIS7, así como la configuración de los dos valores web.config en mi aplicación Virtual Folder Level. Según lo entiendo, no necesito habilitar la compresión en el servidor, ni en el nivel del sitio, y puedo administrarlo por carpeta usando mi archivo web.config.

Tengo dos configuraciones en mi archivo .config que configuré para personalizar gzip para mi aplicación:

         

Sin embargo, cuando ejecuto la aplicación, puedo ver claramente que no se usa gzip, porque el tamaño de mi página es el mismo. También estoy usando YSlow para Firefox, que también confirma que mis páginas no están siendo procesadas.

¿Que me estoy perdiendo aqui? En IIS6 fue una simple cuestión de especificar los tipos de archivos y establecer el nivel de compresión entre 0-10. No veo la necesidad documentada de especificar los tipos de archivos o el nivel de compresión, ya que los valores predeterminados parecen abarcar los tipos de archivos, y no veo el nivel en ningún lado.

Hubo un hilo en forums.iis.net sobre esto durante la versión beta de iis 7. Resultó que el tipo no tenía los módulos instalados, pero parece que lo ha descartado de su frase inicial.

El consejo clave de Microsoft para él fue habilitar el seguimiento de solicitudes fallidas para descubrir qué estaba pasando mal. Esta es posiblemente una de las características menos apreciadas de IIS7, pero sin duda una de las más poderosas.

  • Abra el Administrador de IIS.
  • Vaya a su sitio, y en el panel de acciones (muy a la derecha), haga clic en ‘Seguimiento de solicitudes fallidas …’ en la sección ‘Configurar’.
  • Haga clic en ‘habilitar’.
  • Luego, en la vista de características, haga clic en ‘Reglas de seguimiento de solicitud fallidas’. Haga clic en agregar, luego, ingrese 200 para el código de estado, luego, haga clic en finalizar.

Si no ve “Seguimiento de solicitud fallido” en el panel de acciones, deberá agregar la función al servidor, ya sea mediante el asistente “Agregar servicios de rol” (Health and Diagnostics \ Tracing) o mediante el instalador de Web Platform. (Products \ Server \ IIS: Tracing), y luego cierre y vuelva a abrir el Administrador de IIS.

A continuación, vuelva a ejecutar su prueba. Esto generará algo de información de registro para que podamos examinar.

Busque en c: \ inetpub \ logs \ FailedReqLogFiles \ w3svcx. Verá un grupo de archivos llamados fr000xx.xml. Abre cualquiera de ellos en tu navegador. (Por cierto, si copia estos archivos en cualquier lugar, asegúrese de que freb.xsl esté allí. Además, no elimine freb.xsl; si lo hace, simplemente elimine todo el directorio o cópielo desde otra ubicación, ya que IIS solo crea una vez por carpeta.)

Haga clic en la pestaña “detalles de la solicitud” y seleccione “completar seguimiento de solicitud”. Busque en la página ‘comprimir’, debería encontrarlo en varias áreas; una vez para el contenido estático y una para el contenido dynamic.

Si no encuentra ninguno de ellos, IIS no está configurado correctamente. Si los encuentra, debería verlos seguidos por un compression_success y un compression_do. El éxito es auto explicativo; el ‘do’ indica lo que hizo, en mi caso, mostró “OriginalSize 1462784 CompressedSize 179482”

Como el tuyo no funciona, es de esperar que veas algo diferente que te ayude a resolver el problema.

Asegúrese de desactivarlo cuando haya terminado deshabilitando el seguimiento de solicitudes fallidas en el panel de acciones de su sitio web.

Tuvimos un problema similar y resulta que IIS7 hace algo de aceleración dinámica basada en CPU aquí.

http://www.iis.net/ConfigReference/system.webServer/httpCompression

dynamicCompressionDisableCpuUsage

Atributo uint opcional.

Especifica el porcentaje de utilización de CPU en el que se desactivará la compresión dinámica.

Nota: Este atributo actúa como un límite de CPU superior en el que la compresión dinámica está desactivada. Cuando la utilización de la CPU cae por debajo del valor especificado en el atributo dynamicCompressionEnableCpuUsage, la compresión dinámica se volverá a habilitar.

El valor predeterminado es 90.


dynamicCompressionEnableCpuUsage

Atributo uint opcional.

Especifica el porcentaje de utilización de la CPU por debajo del cual se habilitará la compresión dinámica. El valor debe estar entre 0 y 100. La utilización promedio de la CPU se calcula cada 30 segundos.

Nota: Este atributo actúa como un límite inferior de la CPU por debajo del cual se activa la compresión dinámica. Cuando la utilización de la CPU aumenta por encima del valor especificado en el atributo dynamicCompressionDisableCpuUsage, la compresión dinámica se desactivará.

El valor predeterminado es 50.

Tenga en cuenta los valores predeterminados: si su IIS7 alcanza el 90% de uso de la CPU, se deshabilitará todo el contenido gzip dynamic hasta que el uso de la CPU retroceda por debajo del 50%.

Además, algunas excelentes recomendaciones y puntos de referencia aquí sobre el costo real de la CPU de GZIP.

http://weblogs.asp.net/owscott/archive/2009/02/22/iis-7-compression-good-bad-how-much.aspx

Para resumir, a menos que regularmente tenga páginas dinámicas que excedan los 200kb, no es un problema.

Siguiendo los excelentes consejos de JohnW, también habilité el registro para encontrar al culpable, aunque el motivo del error resultó ser diferente:

 STATIC_COMPRESSION_NOT_SUCCESS Reason 14 Reason NOT_FREQUENTLY_HIT 

En resumen, parece que si no accedes a la página con la frecuencia suficiente, entonces IIS7 no lo considerará digno de compresión, lo cual me parece un poco extraño. No obstante, tiene sentido en este caso porque solo estaba tratando de probarlo en una máquina local.

De acuerdo con esta página , el valor predeterminado parece ser que una página tiene que ser golpeada 2 veces en 10 segundos para ser un “golpe frecuente”. Si realmente lo desea, puede anular el valor predeterminado en applicationHost.config (% systemroot% \ Windows \ System32 \ inetsrv \ config). Al menos para mí es un atributo bloqueado, por lo que no podrás anularlo en tu propio web.config.

  

Además, observo ahora que SO ya tenía esta respuesta aquí: en IIS7, los archivos gzip no se mantienen así .

Resolví mi problema instalando compresión dinámica en Agregar / Quitar progtwigs.

En la sección system.webServer de su archivo Web.config, agregue las siguientes líneas:

   

El esquema de compresión en IIS7 está habilitado de forma predeterminada, pero asigna un solo tipo de mimo de javascript para ser comprimido, application / x-javascript. Al agregar la línea anterior, se le indica a IIS que proporcione todos los archivos .js que mime, lo que a su vez hace que la compresión funcione.

activar la compresión estática La compresión dinámica es para páginas dinámicas como asp, php, aspx, etc.

Aquí hay un enlace a la referencia de configuración de IIS para la compresión :

Para mí, resultó ser el escenario

 noCompressionForProxies 

ya que estamos en un proxy aquí … me quité el proxy y listo, compresión.