Habilitar IIS7 gzip

229

¿Cómo puedo habilitar IIS7 para comprimir archivos estáticos como js y css y cómo puedo probar si IIS7 realmente los está comprimiendo antes de enviarlos al cliente?

Paulo
fuente

Respuestas:

243

Configuración

Puede habilitar la compresión GZIP por completo en su Web.configarchivo. Esto es particularmente útil si está en un alojamiento compartido y no puede configurar IIS directamente, o si desea que su configuración se transmita entre todos los entornos a los que se dirige.

<system.webServer>
  <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 doStaticCompression="true" doDynamicCompression="true"/>
</system.webServer>

Pruebas

Para probar si la compresión funciona o no, use las herramientas de desarrollador en Chrome o Firebug para Firefox y asegúrese de que el encabezado de respuesta HTTP esté configurado:

Content-Encoding: gzip

Tenga en cuenta que este encabezado no estará presente si el código de respuesta es 304 (no modificado). Si ese es el caso, realice una actualización completa (mantenga presionada la tecla Mayús o control mientras presiona el botón Actualizar) y verifique nuevamente.

Drew Noakes
fuente
@ Dennukem, lo siento, no estoy realmente seguro. Solo probé esto en IIS7. ¿Alguien más desea comentar?
Drew Noakes
21
Cuidado: funciona solo si la sección httpCompression en applicationhost.config está desbloqueada. Por defecto, la sección está bloqueada para modificaciones, por lo que anular en web.config no funciona. Perdido varias horas en esto. stackoverflow.com/a/2894695/245460 , vea el comentario debajo del artículo.
Karel Kral
Asegúrese de que sea una característica instalada del rol web y también de MSDN: "También puede agregar entradas comodín para los tipos MIME. Sin embargo, puede establecer tipos MIME solo para el nivel del servidor web. Por ejemplo, para habilitar la compresión estática para "todos los tipos MIME para el sitio web predeterminado, primero agregue entradas comodín para los tipos MIME para el nivel del servidor y luego habilite la compresión estática para el sitio web predeterminado".
Luke Puplett
12
La compresión dinámica tampoco funcionará a menos que tenga el módulo de compresión de contenido dinámico instalado en el servidor (que se puede obtener a través del instalador de la plataforma web). Necesitará esto si está utilizando paquetes Css / Js.
Mark
solo css se está comprimiendo, .jsno lo hace. Además, intenté agregar application/x-javascript. Utilizando junto con tomcat, por lo tanto, eliminó el directoryparámetro.
coding_idiot
58

Deberá habilitar la función en el panel de control de Características de Windows:

Captura de pantalla de la función IIS

Charlie
fuente
16
En Windows Server 2008 R2, se encuentra en Administrador del servidor> Roles> Servidor web (IIS). Haga clic en "Agregar servicios de rol" en la sección "Roles". "Compresión de contenido dinámico" aparece en el encabezado "Rendimiento".
Jonathan Little
37

Global Gzip en HttpModule

Si no tiene acceso a la instancia final de IIS (alojamiento compartido ...), puede crear un HttpModule que agregue este código a cada evento HttpApplication.Begin_Request:

HttpContext context = HttpContext.Current;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
HttpContext.Current.Response.Cache.VaryByHeaders["Accept-encoding"] = true;

Pruebas

Felicitaciones, no se hace ninguna solución sin pruebas. Me gusta usar el complemento de Firefox " Liveheaders ", que muestra toda la información sobre cada mensaje http entre el navegador y el servidor, incluida la compresión, el tamaño del archivo (que puede comparar con el tamaño del archivo en el servidor).

missaghi
fuente
3
Estoy usando alojamiento compartido y no necesité escribir ningún código para habilitar la compresión de salida GZIP. Fue posible a través de Web.config solo. Vea mi respuesta: stackoverflow.com/questions/702124/enable-iis7-gzip/…
Drew Noakes el
2
Coloqué las primeras tres líneas al comienzo de la página aspx que quería comprimir, ¡y funciona! ¡Gracias! Esto es mucho menos complicado que cualquier otro enfoque, y funciona en IIS 6 para mí.
DenNukem
1
Esta es absolutamente la forma de hacerlo.
Matthew James Davis el
5

En Windows 2012 R2 se puede encontrar aquí:

ingrese la descripción de la imagen aquí

Sebastian 506563
fuente
2

Solo necesitaba agregar la función en las funciones de Windows como mencionó Charlie. Para las personas que no pueden encontrarla en la ventana 10 o en el servidor 2012+, búsquela como se muestra a continuación. Luché un poco

Windows 10

ingrese la descripción de la imagen aquí

Windows Server 2012 R2

ingrese la descripción de la imagen aquí

servidor de ventana 2016

ingrese la descripción de la imagen aquí

Ashkan Sirous
fuente
1

Si usa YSlow con Firebug y analiza el rendimiento de su página, ¡YSlow ciertamente le dirá qué artefactos en su página no se descomprimen!

jadusty
fuente
0

Prueba Firefox con los complementos de Firebug instalados. Lo estoy usando; Gran herramienta para desarrolladores web.

También he habilitado la compresión Gzip en mi IIS7 usando web.config.

usuario495450
fuente
Google también tiene una prueba de página disponible: developers.google.com/speed/pagespeed/insights
Dr. Aaron Dishno
0

Para todos los pobres que tienen que luchar con un servidor alemán / alemán :)

auf deutsch bitte schön

Stefan Michev
fuente