La compressione Tomcat non aggiunge una codifica del contenuto:gzip nell'intestazione

StackOverflow https://stackoverflow.com/questions/550024

  •  23-08-2019
  •  | 
  •  

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?

È stato utile?

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.

  1. Riduci al minimo le richieste HTTP: può servire più file JS/CSS in un'unica richiesta
  2. Caching lato client: aggiunge l'intestazione Cache-Control e Expires adeguata
  3. Minimizzazione JS/CSS al volo - utilizzando YUICompressor
  4. Compressione: supporta la compressione bidirezionale per le codifiche gzip/deflate/compress
  5. Caching delle risposte sul server: per evitare la rielaborazione di risorse invariate
  6. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top