2013-05-20 18 views
27

Ho aggiunto le seguenti righe nel file conf/server.xml di tomcat per abilitare la compressione gzip ma non funziona. Le pagine sono ancora non compresse.Tomcat 7 compressione GZIP non funzionante

<Connector port="8080" 
     compression="on" 
     compressionMinSize="2048" 
     noCompressionUserAgents="gozilla, traviata" 
     compressableMimeType="text/html,text/xml,text/plain,text/css, 
     text/javascript,text/json,application/x-javascript, 
     application/javascript,application/json"/> 

Qualche idea?

+0

non hanno mai visto una tale forma, sarà interessante se qualche soluzione è apparsa. Solo per te informazioni: sul nostro progetto usiamo in questo modo http://blog.max.berger.name/2010/01/jetty-7-gzip-filter.html – Dewfy

+3

La tua istanza Tomcat è preceduta da Apache sulla porta 80 o è Tomcat ha avuto accesso direttamente alla porta 8080? –

+0

hi david..un right..it è preceduto da apache sulla porta 80 e questo è il motivo per cui ottengo file non compressi ... quando accedo al mio tomcat sulla porta 8080, ottengo file compressi .... grazie per il puntamento io nella giusta direzione .. –

risposta

30

Se Tomcat è dotato di Apache sulla porta 80, è necessario abilitare la compressione in Apache stesso. La compressione in Tomcat funzionerà solo se si accede direttamente alla porta 8080.

3

Stavo testando le stesse variazioni di server.xml nel mio ambiente di sviluppo locale ed ero frustrato che non funzionasse neanche.

Il mio problema era che stavo facendo modifiche alla mia installazione di Tomcat locale (C: \ apache-tomcat-8.0.5) che ho scelto quando si utilizza la finestra di dialogo Servers window -> (right-click) -> New -> Server in Tool Suite primavera.

Tuttavia, quando è stato pubblicato, la directory di Tomcat effettivamente utilizzato era situato in (cartella di lavoro) \. Metadati \ .plugins \ org.eclipse.wst.server.core \ tmp0.

È possibile controllare la posizione pubblicato facendo clic destro sul server e scegliendo "Sfoglia Deployment posizione ..."

enter image description here

Da lì è possibile aggiornare il file appropriato server.xml, oppure si poteva cancellare e aggiungere nuovamente il server.

3

Nel mio caso non ha funzionato a causa di Antivirus (ESET, Windows)

E 'stato rilegato da qualche parte prima del browser. Ha spacchettato il corpo e rimosso l'intestazione "Content-Encoding". Per la risposta del browser sembrava normale risposta non compresso. Anche in Fiddler era già decompresso.

Le risposte Https funzionavano, ma il resettaggio http è stato decomposto da ESET.

Non è sufficiente. Disattiva ESET. Dovevo andare su "Impostazioni avanzate" -> "Protezione accesso Web" -> "HTTP, HTTPS" e spegnerlo

Se si servono i file dal disco rigido, potrebbe essere necessario aggiungere l'opzione useSendFile = "false" in connettore.

7

Su Windows, ho riscontrato questo comportamento durante il tentativo di abilitare temporaneamente la compressione del contenuto nel mio ambiente di sviluppo per ottenere una comprensione approssimativa del carico utile totale di una pagina nella mia applicazione.

Posso confermare che ESET NOD32 Antivirus si comporta nel modo in cui @bugs_ descrive nella sua risposta a questa domanda e posso anche confermare che l'esecuzione di Fiddler4 ha lo stesso effetto. Tuttavia, sia la chiusura Fiddler e disabilitazione della scansione HTTP di NOD32 non ha risolto il problema, per farlo, ho dovuto disattivare l'utilizzo di 'sendfile' nel mio connettore come segue:

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      compression="on" compressionMinSize="8192" useSendfile="false" 
      compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" 
      redirectPort="8443" /> 

L'attributo importante, qui, è useSendfile="false"

Sto usando Apache Tomcat 8, sotto Windows.La documentazione di Tomcat (http://tomcat.apache.org/tomcat-8.0-doc/config/http.html) dice quanto segue riguardo useSendfile:

Utilizzare questo attributo per abilitare o disabilitare la funzionalità sendfile. Il valore predefinito è true. Si noti che l'uso di sendfile disabilita qualsiasi compressione che Tomcat potrebbe altrimenti avere eseguito sulla risposta.

E questo su compression:

v'è un compromesso tra l'utilizzo di compressione (salvare la larghezza di banda) e utilizzando la funzione sendfile (salvare i cicli di CPU). Se il connettore supporta la funzione sendfile, ad es. il connettore NIO, usando sendfile avrà la precedenza sulla compressione. I sintomi saranno che i file statici maggiori di 48 Kb saranno inviati non compressi. È possibile disattivare sendfile impostando l'attributo useSendfile del connettore, come documentato di seguito, o modificare la soglia di utilizzo del sendfile nella configurazione di DefaultServlet nel conf/web.xml predefinito o nel web.xml della propria applicazione web.

+0

Nel mio caso girava girando ESET abbastanza. Perché il mio tomcat non pubblica file dal disco. –

+0

Lo stesso vale per Tomcat 9 (https://tomcat.apache.org/tomcat-9.0-doc/config/http.html) – Drakonoved