GZip Compression en IIS 7.5 no funciona

Estoy tratando de admitir la compresión GZip para mis archivos estáticos en IIS (que debería estar habilitado por defecto, pero no), pero no funciona hasta el momento. Aquí está la sección bajo el nodo dentro del archivo web.config de la aplicación web;

                    

Lo intenté con Google Chrome. Aquí están los encabezados de solicitud;

Aceptar: texto / html, application / xhtml + xml, application / xml; q = 0.9, / ; q = 0.8

Aceptar-Caracteres: ISO-8859-1, utf-8; q = 0.7, *; q = 0.3

Aceptar-Codificación: gzip, desinflar, sdch

Accept-Language: en-US, en; q = 0.8

Cache-Control: no-caché

Conexión: keep-alive

Anfitrión: my-web-url

Pragma: no-caché

User-Agent: Mozilla / 5.0 (Windows NT 6.0) AppleWebKit / 534.30 (KHTML, como Gecko) Chrome / 12.0.742.122 Safari / 534.30

Estos son los encabezados de respuesta;

Rangos de aceptación: bytes

Longitud del contenido: 232651

Tipo de contenido: application / x-javascript

Fecha: jue, 04 de agosto de 2011 08:58:19 GMT

ETag: “a69135734a50cc1: 0”

Última modificación: lun, 01 de agosto de 2011 12:56:37 GMT

Servidor: Microsoft-IIS / 7.5

X-Powered-By: ASP.NET

Verifico el archivo applicationHost.config y encontré algunos nodos como a continuación;

 ---- 
----
---- ----

¿Que me estoy perdiendo aqui?

Después de mucha búsqueda, finalmente encontré lo que funcionaba con la compresión en mi IIS 7.5. Para empezar, IIS no comprimirá un archivo a menos que se cargue con la frecuencia suficiente. Eso hace surgir la pregunta “¿qué considera IIS con la suficiente frecuencia?” Bueno, los valores predeterminados son 2 veces cada 10 segundos. ¡Ay!

Esta configuración se puede cambiar en web.config, pero la sección necesita ser desbloqueada primero en applicationHost.config. Aquí están los comandos:

Primero desbloquea la sección:

C: \ Windows \ System32 \ inetsrv \ appcmd.exe desbloquear configuración /section:system.webServer/serverRuntime

Sección desbloqueada “system.webServer / serverRuntime” en la ruta de configuración “MACHINE / WEBROOT / APPHOST”.

Ahora que está hecho, edite el archivo web.config y agregue el elemento serverRuntime:





En este caso, configuré para golpear el archivo una vez en un período de 10 horas. Puede ajustar los valores según sea necesario. Aquí está el documento que explica el elemento serverRuntime:

http://www.iis.net/configreference/system.webserver/serverruntime

Espero que esto ayude a que tu compresión funcione también.

Nota: también puede establecer el elemento serverRuntime en el archivo applicationHost.config, pero elegí cambiarlo en el web.config porque tenemos varios servidores y granjas con varios sitios, y es más fácil para mí controlarlo. desde este nivel de granularidad.

Una cosa que hay que tener en cuenta es que el primer golpe generalmente se devuelve sin comprimir inmediatamente, pero gira un hilo para comprimir el archivo en segundo plano a fin de dar servicio a la respuesta con compresión para futuras solicitudes.

Además, ¿ha intentado utilizar un cliente diferente (por ejemplo, IE)?

Asegúrese de instalar Dynamic Compression en el servidor. Agregar / eliminar funciones en IIS.

Las configuraciones de abajo funcionaron para mí. Simplemente reemplace la sección httpCompression en applicationHost.config con la figura a continuación y reinicie IIS. ¡¡¡Eso es!!!

                       

Después de configurar esto, obtuve los encabezados a continuación en respuesta, lo que indica que los datos se comprimen con compresión gzip

 Cache-Control → no-cache Content-Encoding → gzip Content-Length → 4202 Content-Type → application/json; charset=utf-8 Date → Wed, 22 Jul 2015 07:40:17 GMT Expires → -1 Pragma → no-cache Vary → Accept-Encoding X-Powered-By → ASP.NET 

La configuración anterior es para todo el IIS. Si desea configurar esto para un sitio web único, reemplace

 

con

 

en applicationHost.config y en lugar de reemplazar la sección httpCompression en applicationHost.config, agréguela bajo la etiqueta system.webServer en web.config de su sitio web

Además, asegúrese de haber especificado el tipo MIME correcto para sus datos. En mi caso, estaba en JSON, así que usé configuraciones inferiores

   

Me tomó un tiempo resolver esto también. Establecer el atributo frequentHitThreshold en 1 en el nodo system.webServer / serverRuntime en el archivo applicationHost.config debería ser el truco, como se documenta en http://www.iis.net/ConfigReference/system.webServer/serverRuntime .

Puede hacerlo ejecutando el siguiente comando como administrador:

 %windir%\system32\inetsrv\appcmd set config /section:serverRuntime /frequentHitThreshold:1 /commit:apphost 

Una palabra de advertencia: el concepto de “golpe frecuente” no parece específico para la compresión. ¡No tengo idea si hay otras consecuencias como resultado de establecer esto!

“la configuración de system.webServer no permite httpCompression en el nivel del sitio web” https://serverfault.com/questions/125139/iis7-dynamic-compression-not-success-reason-12

¿Por qué usas archivos de configuración? Intente crear un nuevo sitio web ficticio con algún archivo txt de más de 2700 bytes. También puede intentar instalar el módulo de compresión dinámica y encenderlo para el servidor y este sitio ficticio.

Una cosa que descubrimos fue que nuestro sitio web de Azure estaba alcanzando su máximo uso de CPU debido a tener un WebJob de alto recurso en ejecución. Habíamos probado todas las configuraciones anteriores y nada funcionó. Luego verificamos el uso de la CPU de recursos y descubrimos que era 80% +. ¡Al 80% de carga de la CPU, el gzip deja de funcionar!