2010-01-07 6 views
3

J'essaye de configurer Jetty pour qu'il serve du contenu html compressé. Dans le fichier web.xml, j'ai configuré GzipFilter et l'ai mappé à/*, mais cela ne semble pas fonctionner. Voici la configuration du filtre:Problème lors de la configuration de GzipFilter dans Jetty

<filter> 
<filter-name>GZipFilter</filter-name> 
<display-name>Jetty's GZip Filter</display-name> 
<description>Filter that zips all the content on-the-fly</description> 
<filter-class>org.mortbay.servlet.GzipFilter</filter-class> 
<init-param> 
    <param-name>mimeTypes</param-name> 
    <param-value>text/html</param-value> 
</init-param> 
</filter> 

<filter-mapping> 
<filter-name>GZipFilter</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 

Je commence tout juste à utiliser Jetty, donc la solution pourrait être ridiculement simple. Si vous pouvez me lier à de la documentation qui pourrait m'aider, ce serait génial aussi.

Répondre

0

Quelle était l'erreur? Avez-vous des problèmes de classpath ou autre chose? Si classpath, vous devez vous assurer que la classe gzipfilter est disponible pour le runtime de la jetée ou qu'elle mourra.

+1

J'ai finalement eu le temps de revenir sur ce problème. Je ne reçois aucune erreur. Mais je ne vois pas de gzipping qui se passe réellement. Comment puis-je vérifier que le filtre fonctionne réellement? – Misha

+0

@Misha, Vous pouvez soit utiliser le logiciel de suivi des paquets TCP, ou vérifier en utilisant certains outils en ligne, comme http://www.gidnetwork.com/tools/gzip-test.php – spektom

-1

Envoyez-vous la demande avec l'en-tête de requête "Content-Encoding: gzip"?

3

compression GZIP

La compression GZIP peut être utilisé pour réduire la quantité de données envoyées "sur le fil". La compression est appliquée en tant que codage de transport. Cela peut grandement améliorer les performances de l'application Web, mais elle peut également consommer davantage de ressources processeur et certains contenus (par exemple des images) ne peuvent pas être correctement compressés.

Article statique

La jetée par défaut Servlet peut servir du contenu statique précomprimé comme un codage de transport et éviter les frais de sur-compression à la volée. Si le paramètre init "gzip" est défini sur true, Jetty recherche les ressources statiques compressées. Donc si une requête pour "foo.txt" est reçue et que le fichier "foo.txt.gz" existe, alors il sera servi comme "foo.txt" avec un encodage de transport gzip.

GzipFilter

Le filtre Ponton gzip est un filtre de compression qui peut être appliquée sur presque toute ressource dynamique (servlet). Il corrige un grand nombre de bogues dans les filtres de compression couramment disponibles (par exemple, gère toutes les manières possibles de définir la longueur du contenu) et a testé les suites et les suspensions des requêtes.

Certains agents utilisateurs peuvent être exclus de la compression, afin d'éviter certains bugs de navigateur courants (oui cela signifie IE!).

se réfèrent de la jetée doc: http://docs.codehaus.org/display/JETTY/GZIP+Compression

vous pouvez regarder le code source Gzipfilter, voici beaucoup de commentaires utiles: http://download.eclipse.org/jetty/stable-7/xref/org/eclipse/jetty/servlets/GzipFilter.html

1

Parfois, l'utilisation Gzipfilter a quelques problèmes, selon la façon dont vous Manipulation des tampons et rinçage. En tant que tel, l'utilisation de org.eclipse.jetty.servlets.IncludableGzipFilter (qui étend en fait GzipFilter) peut résoudre vos problèmes.

3

Je vais répondre à cela aussi, car j'ai eu un énorme headake qui essayait de faire ce travail, et je l'ai finalement fait. En outre, je ne suis pas un expert majeur dans les détails de HTTP, donc je vais donner une réponse non professionnelle. D'abord, voici comment j'ai vérifié si mon GZipFilter fonctionnait ou non. J'ai démarré Firefox, vérifié que j'avais l'addon Firebug, lancé l'extension Firebug, je suis allé sur l'onglet "Net". Ensuite, j'ai accédé à l'URL qui devrait renvoyer une réponse GZipped.Voici ce que Firebug montre:

enter image description here

La colonne « Taille » indique la taille de la réponse. Si vous passez la souris sur l'étiquette de la colonne "Taille", elle vous indiquera que si la réponse est compressée, elle affichera la taille compressée de la réponse.

Tout cela a été fait avec le filtre GZip activé dans Jetty. J'ai ensuite supprimé la déclaration de filtre GZip de mon web.xml, redémarré Jetty et répété le test. Cette fois, la réponse avait la même taille qu'avant, ce qui indiquait clairement que la compression GZip ne fonctionnait pas.

Après plusieurs essais et erreurs, ce que j'ai fait est de regarder dans Firebug dans la section "Request Headers" pour voir la valeur de l'en-tête "Accept". J'ai remarqué qu'ici il y avait des valeurs telles que "application/xml" et "text/xml", mais la façon dont j'avais configuré le paramètre init "mimeTypes" de mon filtre GZIp ne contenait que l'application "text/xml"/xml "). Il a été configuré comme ceci:

<filter> 
     <filter-name>GzipFilter</filter-name> 
     <filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class> 
     <init-param> 
     <param-name>mimeTypes</param-name> 
     <param-value>text/html,text/plain,text/xml,application/xhtml+xml,text/css,application/javascript,image/svg+xml,application/json,application/xml; charset=UTF-8</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>GzipFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

Après avoir ajouté la valeur « application/xml » à la liste comme ceci:

<filter> 
     <filter-name>GzipFilter</filter-name> 
     <filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class> 
     <init-param> 
     <param-name>mimeTypes</param-name> 
     <param-value>text/html,text/plain,text/xml,application/xhtml+xml,application/xml,text/css,application/javascript,image/svg+xml,application/json,application/xml; charset=UTF-8</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>GzipFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

Je refis mon test précédent, et bien sûr maintenant la taille déclarée de la réponse était beaucoup plus petite:

enter image description here

notez également que maintenant, les têtes de réponse signalés contiennent un champ supplémentaire appelé « Content-Encoding » avec une valeur de "gzip". Donc, fondamentalement, l'idée est de vérifier le type de valeurs que vous envoyez dans l'en-tête Request "Accept" et assurez-vous que toutes ces valeurs sont configurées dans le paramètre init "mimeTypes" du filtre GZip.

1

jetée 9.3:

  1. modifier jetty.conf et inclure le modifier fichier xml "jetée-gzip.xml"

  2. start.ini et ajouter "--module = servlets"

  3. éditez jetty-gzip.xml et configurez les types mime souhaités.

  4. Redémarrez la jetée et testez à nouveau.

Questions connexes