summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ivy.xml23
-rw-r--r--source/net/yacy/http/Jetty12HttpServer.java50
-rw-r--r--test/java/net/yacy/http/Jetty12HttpServerTest.java24
-rwxr-xr-xtest/jetty-solr-dependency-guard.sh7
4 files changed, 49 insertions, 55 deletions
diff --git a/ivy.xml b/ivy.xml
index 4192d6ff5..558394ab3 100644
--- a/ivy.xml
+++ b/ivy.xml
@@ -94,27 +94,26 @@
<dependency org="org.bouncycastle" name="bcmail-jdk18on" rev="1.84" />
<dependency org="com.fasterxml.woodstox" name="woodstox-core" rev="7.2.1" />
<!-- Jetty 12 Core and EE8 form the public embedded-server runtime. -->
- <dependency org="org.eclipse.jetty" name="jetty-http" rev="12.1.11" conf="compile->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-io" rev="12.1.11" conf="compile->default"/>
+ <dependency org="org.eclipse.jetty" name="jetty-http" rev="12.0.37" conf="compile->default"/>
+ <dependency org="org.eclipse.jetty" name="jetty-io" rev="12.0.37" conf="compile->default"/>
<dependency org="org.eclipse.jetty" name="jetty-client" rev="9.4.58.v20250814" conf="solr9-bridge->master"/>
- <dependency org="org.eclipse.jetty" name="jetty-proxy" rev="12.1.11" conf="compile->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-security" rev="12.1.11" conf="compile->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-server" rev="12.1.11" conf="compile->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-util" rev="12.1.11" conf="compile->default" />
- <dependency org="org.eclipse.jetty.compression" name="jetty-compression-server" rev="12.1.11" conf="compile->default"/>
- <dependency org="org.eclipse.jetty.ee8" name="jetty-ee8-nested" rev="12.1.11" conf="compile->default">
+ <dependency org="org.eclipse.jetty" name="jetty-proxy" rev="12.0.37" conf="compile->default"/>
+ <dependency org="org.eclipse.jetty" name="jetty-security" rev="12.0.37" conf="compile->default"/>
+ <dependency org="org.eclipse.jetty" name="jetty-server" rev="12.0.37" conf="compile->default"/>
+ <dependency org="org.eclipse.jetty" name="jetty-util" rev="12.0.37" conf="compile->default" />
+ <dependency org="org.eclipse.jetty.ee8" name="jetty-ee8-nested" rev="12.0.37" conf="compile->default">
<exclude org="org.eclipse.jetty.toolchain" module="jetty-servlet-api"/>
</dependency>
- <dependency org="org.eclipse.jetty.ee8" name="jetty-ee8-security" rev="12.1.11" conf="compile->default">
+ <dependency org="org.eclipse.jetty.ee8" name="jetty-ee8-security" rev="12.0.37" conf="compile->default">
<exclude org="org.eclipse.jetty.toolchain" module="jetty-servlet-api"/>
</dependency>
- <dependency org="org.eclipse.jetty.ee8" name="jetty-ee8-servlet" rev="12.1.11" conf="compile->default">
+ <dependency org="org.eclipse.jetty.ee8" name="jetty-ee8-servlet" rev="12.0.37" conf="compile->default">
<exclude org="org.eclipse.jetty.toolchain" module="jetty-servlet-api"/>
</dependency>
- <dependency org="org.eclipse.jetty.ee8" name="jetty-ee8-servlets" rev="12.1.11" conf="compile->default">
+ <dependency org="org.eclipse.jetty.ee8" name="jetty-ee8-servlets" rev="12.0.37" conf="compile->default">
<exclude org="org.eclipse.jetty.toolchain" module="jetty-servlet-api"/>
</dependency>
- <dependency org="org.eclipse.jetty.ee8" name="jetty-ee8-webapp" rev="12.1.11" conf="compile->default">
+ <dependency org="org.eclipse.jetty.ee8" name="jetty-ee8-webapp" rev="12.0.37" conf="compile->default">
<exclude org="org.eclipse.jetty.toolchain" module="jetty-servlet-api"/>
</dependency>
<!-- Private Solr bridge inputs remain on Jetty 9. -->
diff --git a/source/net/yacy/http/Jetty12HttpServer.java b/source/net/yacy/http/Jetty12HttpServer.java
index 16590266c..f38a1a8d0 100644
--- a/source/net/yacy/http/Jetty12HttpServer.java
+++ b/source/net/yacy/http/Jetty12HttpServer.java
@@ -37,10 +37,6 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.eclipse.jetty.compression.gzip.GzipCompression;
-import org.eclipse.jetty.compression.gzip.GzipDecoderConfig;
-import org.eclipse.jetty.compression.server.CompressionConfig;
-import org.eclipse.jetty.compression.server.CompressionHandler;
import org.eclipse.jetty.ee8.security.ConstraintSecurityHandler;
import org.eclipse.jetty.ee8.security.RoleInfo;
import org.eclipse.jetty.ee8.security.authentication.DigestAuthenticator;
@@ -49,7 +45,6 @@ import org.eclipse.jetty.ee8.servlet.ServletHolder;
import org.eclipse.jetty.ee8.webapp.WebAppContext;
import org.eclipse.jetty.http.HttpMethod;
import org.eclipse.jetty.http.HttpVersion;
-import org.eclipse.jetty.http.MimeTypes;
import org.eclipse.jetty.io.Connection;
import org.eclipse.jetty.security.HashLoginService;
import org.eclipse.jetty.security.UserPrincipal;
@@ -64,6 +59,7 @@ import org.eclipse.jetty.server.SecureRequestCustomizer;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.SslConnectionFactory;
+import org.eclipse.jetty.server.handler.gzip.GzipHandler;
import org.eclipse.jetty.server.handler.InetAccessHandler;
import org.eclipse.jetty.util.Callback;
import org.eclipse.jetty.util.security.Credential;
@@ -203,38 +199,24 @@ public class Jetty12HttpServer implements YaCyHttpServer {
security.setLoginService(loginService);
webApp.setSecurityHandler(security);
- final CompressionHandler compressionHandler = new CompressionHandler(webApp.get());
- final GzipCompression gzip = new GzipCompression();
- final GzipDecoderConfig decoder = new GzipDecoderConfig();
- decoder.setBufferSize(HttpServerBootstrapConfig.REQUEST_INFLATE_BUFFER_SIZE);
- gzip.setDefaultDecoderConfig(decoder);
- compressionHandler.putCompression(gzip);
- compressionHandler.putConfiguration("/*",
- createCompressionConfig(bootstrap.gzipResponsesEnabled()));
- return compressionHandler;
+ return createGzipHandler(webApp.get(), bootstrap.gzipResponsesEnabled());
}
- static CompressionConfig createCompressionConfig(final boolean gzipResponsesEnabled) {
- final CompressionConfig.Builder compression = CompressionConfig.builder()
- .compressIncludeMethod("GET")
- .decompressIncludeMethod("POST");
- for (final String type : MimeTypes.DEFAULTS.getMimeMap().values()) {
- if ("image/svg+xml".equals(type)) {
- compression.compressExcludePath("*.svgz").decompressExcludePath("*.svgz");
- } else if (type.startsWith("image/") || type.startsWith("audio/")
- || type.startsWith("video/")) {
- compression.compressExcludeMimeType(type).decompressExcludeMimeType(type);
- }
- }
- for (final String type : new String[] {"application/compress", "application/zip",
- "application/gzip", "application/bzip2", "application/brotli",
- "application/x-xz", "application/x-rar-compressed"}) {
- compression.compressExcludeMimeType(type).decompressExcludeMimeType(type);
- }
+ static GzipHandler createGzipHandler(final Handler handler, final boolean gzipResponsesEnabled) {
+ final GzipHandler gzip = new GzipHandler(handler);
+ gzip.setIncludedMethods(HttpMethod.GET.asString());
+ gzip.setInflateBufferSize(HttpServerBootstrapConfig.REQUEST_INFLATE_BUFFER_SIZE);
+ gzip.addIncludedInflationPaths("/*");
+ gzip.addExcludedInflationPaths("*.svgz");
if (!gzipResponsesEnabled) {
- compression.compressExcludeMethod("GET").compressExcludeMethod("POST");
- }
- return compression.build();
+ gzip.addExcludedMethods(HttpMethod.GET.asString());
+ }
+ /*
+ * Jetty 12.1 replaced GzipHandler with CompressionHandler plus
+ * GzipCompression/GzipDecoderConfig. Restore that adapter when YaCy moves
+ * back to 12.1 or later; it also supports method-specific decompression.
+ */
+ return gzip;
}
@Override
diff --git a/test/java/net/yacy/http/Jetty12HttpServerTest.java b/test/java/net/yacy/http/Jetty12HttpServerTest.java
index 160188358..457eaa8ae 100644
--- a/test/java/net/yacy/http/Jetty12HttpServerTest.java
+++ b/test/java/net/yacy/http/Jetty12HttpServerTest.java
@@ -23,7 +23,6 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.eclipse.jetty.compression.server.CompressionConfig;
import org.eclipse.jetty.ee8.security.authentication.DigestAuthenticator;
import org.eclipse.jetty.ee8.servlet.ServletContextHandler;
import org.eclipse.jetty.ee8.servlet.ServletHolder;
@@ -34,6 +33,7 @@ import org.eclipse.jetty.server.Response;
import org.eclipse.jetty.server.SecureRequestCustomizer;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
+import org.eclipse.jetty.server.handler.gzip.GzipHandler;
import org.eclipse.jetty.server.handler.InetAccessHandler;
import org.eclipse.jetty.util.Callback;
import org.eclipse.jetty.util.security.Credential;
@@ -79,7 +79,7 @@ public class Jetty12HttpServerTest {
0, "127.0.0.1", 1, null, -1);
assertFalse(server.withSSL());
assertEquals(-1, server.getSslPort());
- assertTrue(server.getVersion().startsWith("Jetty 12.1.11"));
+ assertTrue(server.getVersion().startsWith("Jetty 12.0.37"));
try {
server.startupServer();
@@ -116,10 +116,22 @@ public class Jetty12HttpServerTest {
@Test
public void preservesJetty9SvgCompressionContract() {
- final CompressionConfig compression = Jetty12HttpServer.createCompressionConfig(true);
- assertTrue(compression.isCompressMimeTypeSupported("image/svg+xml"));
- assertFalse(compression.isCompressMimeTypeSupported("image/png"));
- assertTrue(compression.isCompressMethodSupported("GET"));
+ final GzipHandler compression = Jetty12HttpServer.createGzipHandler(null, true);
+ assertTrue(compression.isMimeTypeDeflatable("image/svg+xml"));
+ assertFalse(compression.isMimeTypeDeflatable("image/png"));
+ assertEquals(HttpServerBootstrapConfig.REQUEST_INFLATE_BUFFER_SIZE,
+ compression.getInflateBufferSize());
+ assertTrue(java.util.Arrays.asList(compression.getIncludedMethods()).contains("GET"));
+ assertTrue(java.util.Arrays.asList(compression.getIncludedInflationPaths()).contains("/*"));
+ assertTrue(java.util.Arrays.asList(compression.getExcludedInflationPaths()).contains("*.svgz"));
+ }
+
+ @Test
+ public void canDisableGzipResponsesWithoutDisablingRequestInflation() {
+ final GzipHandler compression = Jetty12HttpServer.createGzipHandler(null, false);
+ assertTrue(java.util.Arrays.asList(compression.getExcludedMethods()).contains("GET"));
+ assertEquals(HttpServerBootstrapConfig.REQUEST_INFLATE_BUFFER_SIZE,
+ compression.getInflateBufferSize());
}
@Test
diff --git a/test/jetty-solr-dependency-guard.sh b/test/jetty-solr-dependency-guard.sh
index f90302a4f..9347c4fd7 100755
--- a/test/jetty-solr-dependency-guard.sh
+++ b/test/jetty-solr-dependency-guard.sh
@@ -41,7 +41,7 @@ fi
grep -E 'name="jetty-client".*conf="solr9-bridge->master"' ivy.xml >/dev/null 2>&1 || \
fail "jetty-client must only be a direct input of the Solr 9 bridge"
-server_jetty_version=12.1.11
+server_jetty_version=12.0.37
for artifact in jetty-http jetty-io jetty-proxy jetty-security jetty-server jetty-util; do
grep -E "org=\"org.eclipse.jetty\" name=\"$artifact\" rev=\"$server_jetty_version\" conf=\"compile->default\"" ivy.xml >/dev/null 2>&1 || \
@@ -52,8 +52,9 @@ for artifact in jetty-ee8-nested jetty-ee8-security jetty-ee8-servlet jetty-ee8-
grep -E "org=\"org.eclipse.jetty.ee8\" name=\"$artifact\" rev=\"$server_jetty_version\" conf=\"compile->default\"" ivy.xml >/dev/null 2>&1 || \
fail "$artifact $server_jetty_version must be an explicit production EE8 dependency"
done
-grep -E "org=\"org.eclipse.jetty.compression\" name=\"jetty-compression-server\" rev=\"$server_jetty_version\" conf=\"compile->default\"" ivy.xml >/dev/null 2>&1 || \
- fail "Jetty 12 compression server support must be on the production classpath"
+if grep -E 'org="org.eclipse.jetty.compression"|name="jetty-compression-' ivy.xml >/dev/null 2>&1; then
+ fail "Jetty 12.1 compression modules must not be declared on the Jetty 12.0 classpath"
+fi
if grep -E 'conf="jetty12-migration|rev="9\.4\.58\.v20250814" conf="compile' ivy.xml >/dev/null 2>&1; then
fail "ivy.xml still contains an isolated migration configuration or public Jetty 9 dependency"