Jetty mit gzip-Komprimierung
Der Karaf verwendet für die Auslieferung der Webseitenresourcen den Webserver Jetty. Dieser verwendet per Default keine Komprimierung, diese kann jedoch aktiviert werden.
Bei den Karaf-Installationsdateien die nach dem 28.09.2021 herunter geladen wurden (BPC 3.4.x und BPC 4.0.0) ist die unten aufgelistete jetty.xml bereits angepasst. |
Aktivierung
Damit der Karaf/Jetty die Webseitenresourcen komprimiert ausliefert, muss in der
ein GzipHandler installiert werden. Dazu in der [karaf]/etc/jetty.xml
folgendes Fragment am Ende einfügen.jetty.xml
Der Karaf muss nach Anpassung der |
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
...
<!-- ====================== -->
<!-- Insert the GzipHandler -->
<!-- ====================== -->
<Call name="insertHandler">
<Arg>
<New id="GzipHandler" class="org.eclipse.jetty.server.handler.gzip.GzipHandler">
<Set name="minGzipSize"><Property name="jetty.gzip.minGzipSize" default="1024"/></Set>
<Set name="checkGzExists"><Property name="jetty.gzip.checkGzExists" default="false"/></Set>
<Set name="compressionLevel"><Property name="jetty.gzip.compressionLevel" default="-1"/></Set>
<Set name="inflateBufferSize"><Property name="jetty.gzip.inflateBufferSize" default="0"/></Set>
<Set name="syncFlush"><Property name="jetty.gzip.syncFlush" default="false" /></Set>
<Set name="excludedAgentPatterns">
<Array type="String">
<!-- IE 6 has known bugs related to GZIP compression -->
<Item><Property name="jetty.gzip.excludedUserAgent" default=".*MSIE.6\.0.*"/></Item>
</Array>
</Set>
<Set name="includedMethodList"><Property name="jetty.gzip.includedMethodList" default="GET" /></Set>
<Set name="excludedMethodList"><Property name="jetty.gzip.excludedMethodList" default="" /></Set>
<!--
<Set name="includedMethods">
<Array type="String">
<Item>GET</Item>
</Array>
</Set>
<Set name="includedPaths">
<Array type="String">
<Item>/*</Item>
</Array>
</Set>
<Set name="excludedPaths">
<Array type="String">
<Item>*.gz</Item>
</Array>
</Set>
<Call name="addIncludedMimeTypes">
<Arg>
<Array type="String">
<Item>some/type</Item>
</Array>
</Arg>
</Call>
<Call name="addExcludedMimeTypes">
<Arg>
<Array type="String">
<Item>some/type</Item>
</Array>
</Arg>
</Call>
-->
</New>
</Arg>
</Call>
</Configure>
Syntax
Die in der
verwendete Syntax ist ein wenig Gewöhnungsbedürftig. Zwei Sachen sind hierbei essentiell:jetty.xml
-
Die einzelnen XML-Elemente werden zur Laufzeit direkt in Java Aufrufe umgesetzt. Deshalb kann es nicht schaden, wenn man sich mit der Jetty-XML-Syntax vertraut macht.
-
Die einzelnen XML-Elemente beziehen sich alle auf die Java Methoden der GzipHandler Klasse. Die oben gesetzten Werte sind nicht alle die gesetzt werden können. Ein Blick in die GzipHandler JavaDoc kann nicht schaden.
Wichtige Konfigurationen des GzipHandler
-
Die Mindestgröße in Bytes, die eine Antwort haben muss, bevor die Komprimierung ausgelöst wird. Ist oben auf 1024 Bytes gesetzt. Das bedeutet, dass Antworten die kleiner als 1024 Bytes sind, nicht komprimiert werden.minGzipSize
-
Der Gzip Kompressionslevel: 0-9, mit -1 als Default was derzeit dem Kompressionslevel 6 entspricht. Dies ist ein guter Kompromiss zwischen Geschwindigkeit und Größe der Antwort.compressionLevel
Voraussetzung dass die jetty.xml zum Einsatz kommt
Sicherstellen, dass in der
folende Zeile enthalten ist.[karaf]/etc/org.ops4j.pax.web.cfg
org.ops4j.pax.web.config.file=${karaf.etc}/jetty.xml