Abilita IIS7 gzip


229

Come posso abilitare IIS7 per decomprimere i file statici come js e css e come posso verificare se IIS7 li sta davvero comprimendo prima di inviarli al client?

Risposte:


243

Configurazione

Puoi abilitare la compressione GZIP interamente nel tuo Web.configfile. Ciò è particolarmente utile se si utilizza l'hosting condiviso e non è possibile configurare direttamente IIS o se si desidera che la propria configurazione venga trasportata tra tutti gli ambienti target.

<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>

analisi

Per verificare se la compressione funziona o meno, utilizzare gli strumenti per sviluppatori in Chrome o Firebug per Firefox e assicurarsi che sia impostata l'intestazione della risposta HTTP:

Content-Encoding: gzip

Nota che questa intestazione non sarà presente se il codice di risposta è 304 (non modificato). In tal caso, esegui un aggiornamento completo (tieni premuto Maiusc o Control mentre premi il pulsante di aggiornamento) e ricontrolla.


@DenNukem, scusa non sono proprio sicuro. L'ho provato solo su IIS7. Qualcun altro ha intenzione di commentare?
Drew Noakes,

21
Attenzione: funziona solo se la sezione httpCompression in applicationhost.config è sbloccata. Per impostazione predefinita, la sezione è bloccata per le modifiche, quindi la sostituzione in web.config non funziona. Ho perso diverse ore su questo. stackoverflow.com/a/2894695/245460 , vedi commento sotto l'articolo.
Karel Kral,

Assicurati che sia una funzionalità installata del ruolo Web e anche da MSDN: "Puoi anche aggiungere voci jolly per i tipi MIME. Tuttavia, puoi impostare i tipi MIME solo per il livello del server Web. Ad esempio, per abilitare la compressione statica per tutti i tipi MIME per il sito Web predefinito, aggiungere prima le voci jolly per i tipi MIME per il livello del server, quindi abilitare la compressione statica per il sito Web predefinito. "
Luke Puplett,

12
La compressione dinamica non funzionerà anche se sul server non è installato il modulo Dynamic Content Compression (raggiungibile tramite il programma di installazione della piattaforma Web). Ne avrai bisogno se stai usando i bundle Css / Js.
Segna il

solo il CSS viene compresso, .jsno. Inoltre, ho provato ad aggiungere application/x-javascript. Usando insieme a Tomcat, quindi rimosso il directoryparametro.
coding_idiot,

58

Dovrai abilitare la funzione nel pannello di controllo delle funzionalità di Windows:

Schermata delle funzionalità di IIS


16
In Windows Server 2008 R2, questo si trova in Server Manager> Ruoli> Web Server (IIS). Fai clic su "Aggiungi servizi ruolo" nella sezione "Ruoli". "Compressione dinamica del contenuto" è elencata sotto l'intestazione "Prestazioni".
Jonathan Little,

37

Global Gzip in HttpModule

Se non hai accesso all'istanza IIS finale (hosting condiviso ...) puoi creare un HttpModule che aggiunge questo codice a ogni 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;

analisi

Complimenti, nessuna soluzione è fatta senza test. Mi piace usare il plug-in " Liveheaders " di Firefox che mostra tutte le informazioni su ogni messaggio http tra il browser e il server, compresa la compressione, la dimensione del file (che è possibile confrontare con la dimensione del file sul server).


3
Sto utilizzando l'hosting condiviso e non è stato necessario scrivere alcun codice per abilitare la compressione dell'output GZIP. Era possibile solo tramite Web.config. Vedi la mia risposta: stackoverflow.com/questions/702124/enable-iis7-gzip/…
Drew Noakes

2
Ho posizionato le prime tre righe all'inizio dell'unica pagina aspx che volevo comprimere e funziona! Grazie! Questo è molto meno seccante di qualsiasi altro approccio e funziona su IIS 6 per me.
DenNukem,

1
Questo è assolutamente il modo di farlo.
Matthew James Davis,


2

Ho solo bisogno di aggiungere la funzionalità nelle funzionalità di Windows come ha detto Charlie. Per le persone che non riescono a trovarla su Windows 10 o sul server 2012+ la trovano come di seguito. Ho faticato un po '

Windows 10

inserisci qui la descrizione dell'immagine

windows server 2012 R2

inserisci qui la descrizione dell'immagine

window server 2016

inserisci qui la descrizione dell'immagine


1

Se usi YSlow con Firebug e analizzi le prestazioni della tua pagina, YSlow ti dirà sicuramente quali artefatti sulla tua pagina non sono compressi con gzip!





0

Per tutti i poveri che devono lottare con un server tedesco / tedesco :)

auf deutsch bitte schön

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.