La compressione Tomcat non aggiunge una codifica del contenuto:gzip nell'intestazione
Domanda
Sto usando Tomcat per comprimere il mio contenuto HTML in questo modo:
<Connector port="8080" maxHttpHeaderSize="8192"
maxProcessors="150" maxThreads="150" minSpareThreads="25"
maxSpareThreads="75" enableLookups="false" redirectPort="8443"
acceptCount="150" connectionTimeout="20000" disableUploadTimeout="true"
compression="on" compressionMinSize="128" noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html"
URIEncoding="UTF-8" />
Nell'intestazione HTTP (come osservato tramite YSlow), tuttavia, non vedo
Content-Encoding: gzip
con conseguente punteggio YSlow scarso.
Tutto quello che vedo è
HeadersPost
Response Headers
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=ISO-8859-1
Content-Language: en-US
Content-Length: 5251
Date: Sat, 14 Feb 2009 23:33:51 GMT
Sto eseguendo una configurazione Tomcat mod_jk di Apache.
Come posso comprimere il contenuto HTML con Tomcat e aggiungere anche "Content-Encoding:gzip" nell'intestazione?
Soluzione
Dai un'occhiata alla http://sourceforge.net/projects/pjl-comp-filter/ .
Altre soluzioni personalizzate possono avere perdite di memoria.
Inoltre, se si sta utilizzando mod_jk allora siete certamente non utilizza il connettore 8080 (che supporta la compressione) per tali richieste.
Altri suggerimenti
Tomcat farà la compressione. Tuttavia, poiché si utilizza mod_jk
Credo che si si stanno ottenendo le richieste tramite Apache sulla porta 80 piuttosto che Tomcat sulla porta 8080
. Come esperimento provare a ottenere la vostra pagina tramite la porta 8080 e poi controllando yslow
si dovrebbe vedere le intestazioni corrette.
Credo che ciò che sta accadendo è che Apache è decompresso il contenuto che si sta facendo da Tomcat tramite mod_jk
e poi passando il contenuto sgonfio al browser.
Se si desidera utilizzare mod_jk
sarà necessario impostare il livello di compressione su Apache Tomcat, piuttosto che.
Forse la compressione Tomcat si riferisce non è gzip? E 'un salto nel buio, ma potrebbe riguardare la compressione spazi bianchi, o la linea taglio.
mi immagino Tomcat sarebbe un po 'più esplicito in questo senso (si spera).
Abbiamo il filtro gzip citato da duffmo esecuzione nella nostra applicazione, il web.xml simile a questa:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd">
<display-name>App-Web</display-name>
<!-- FILTERS -->
<!-- Gzip filter -->
<filter>
<filter-name>GZIPFilter</filter-name>
<filter-class>weblogicx.servlet.gzip.filter.GZIPFilter</filter-class>
</filter>
[snip]
</web-app>
Per migliorare le prestazioni complessive lato client dell'applicazione Web J2EE, puoi provare la libreria Java WebUtilities.
Ecco il link :: http://code.google.com/p/webutilities/.
Fornisce filtri, tag e componenti servlet per applicare varie pratiche prestazionali lato client con conseguente valutazione delle prestazioni più elevata rispetto a PageSpeed/YSlow.
Dalla versione 0.0.4 aiuta a seguire le pratiche prestazionali.
- Riduci al minimo le richieste HTTP: può servire più file JS/CSS in un'unica richiesta
- Caching lato client: aggiunge l'intestazione Cache-Control e Expires adeguata
- Minimizzazione JS/CSS al volo - utilizzando YUICompressor
- Compressione: supporta la compressione bidirezionale per le codifiche gzip/deflate/compress
- Caching delle risposte sul server: per evitare la rielaborazione di risorse invariate
- Aggiungi la codifica dei caratteri: per farlo sapere in anticipo al browser
È inoltre altamente configurabile/personalizzazione rispetto a MIME, URL o agenti utente.
Ho dato un'occhiata alla documentazione di Tomcat qui: http://tomcat.apache.org/tomcat-5.5-doc/ config / http.html
Si parla usando compression="force"
che ha lavorato per me. Si dice anche è possibile impostare un minimum number
. Questo ha funzionato bene per me
<Connector port="8080" compression="256000" />
(comprimere qualcosa di più di 256Kb)
Il valore predefinito per compressableMimeType
significava che non ho bisogno di questo attributo.
Si noti inoltre che non elenca attributo CompressionMinSize
.