.net - compresion - GZip Compression en IIS 7.5 no funciona
gzip compression iis (7)
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 <system.webServer>
dentro del archivo web.config de la aplicación web;
<httpCompression directory="%SystemDrive%/inetpub/temp/IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%/system32/inetsrv/gzip.dll" staticCompressionLevel="9" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" />
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;
----
<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
----
<section name="urlCompression" overrideModeDefault="Allow" />
----
<httpCompression directory="%SystemDrive%/inetpub/temp/IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%/system32/inetsrv/gzip.dll" />
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
----
<urlCompression />
¿Que me estoy perdiendo aqui?
"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.
Asegúrese de instalar Dynamic Compression en el servidor. Agregar / eliminar funciones en IIS.
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:
<? xml version = "1.0" encoding = "UTF-8"?>
<configuración>
<system.webServer>
<serverRuntime frequentHitThreshold = "1" frequentHitTimePeriod = "10:00:00" />
...
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.
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!!!
<httpCompression directory="%SystemDrive%/inetpub/temp/IIS Temporary Compressed Files"
staticCompressionDisableCpuUsage="95" staticCompressionEnableCpuUsage="60"
dynamicCompressionDisableCpuUsage="95" dynamicCompressionEnableCpuUsage="50">
<scheme name="gzip" dll="%Windir%/system32/inetsrv/gzip.dll" staticCompressionLevel="9" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
<add mimeType="application/json" enabled="true" />
<add mimeType="application/json; charset=utf-8" enabled="true" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="application/json; charset=utf-8" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
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
<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
con
<section name="httpCompression" overrideModeDefault="Allow" />
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
<add mimeType="application/json" enabled="true" />
<add mimeType="application/json; charset=utf-8" enabled="true" />
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!
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!
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)?