diff options
author | Bjørn Christian Seime <bjorn.christian@seime.no> | 2018-07-24 12:41:47 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-24 12:41:47 +0200 |
commit | df1f569c52be3d28d6d6525c533f0576a907a11d (patch) | |
tree | 6080da40748c191aede753419873962beb0551e8 | |
parent | e9572acc8426d049a71832e5f5c734a2df048e83 (diff) | |
parent | 686f89f3112560a23bb0818f7401e446fff5da28 (diff) |
Merge pull request #6455 from vespa-engine/bjorncs/support-gzipped-requests
Bjorncs/support gzipped requests
3 files changed, 23 insertions, 4 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java index f149d6eb34d..452d1aed874 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java +++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JettyHttpServer.java @@ -365,12 +365,11 @@ public class JettyHttpServer extends AbstractServerProvider { return statisticsHandler; } - @SuppressWarnings("deprecation") private GzipHandler newGzipHandler(ServerConfig serverConfig) { GzipHandler gzipHandler = new GzipHandlerWithVaryHeaderFixed(); gzipHandler.setCompressionLevel(serverConfig.responseCompressionLevel()); - gzipHandler.setCheckGzExists(false); // TODO: will be removed without replacement in Jetty 10 - gzipHandler.setIncludedMethods("GET", "POST"); + gzipHandler.setInflateBufferSize(8 * 1024); + gzipHandler.setIncludedMethods("GET", "POST", "PUT", "PATCH"); return gzipHandler; } diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java index 7c79897ac27..30d5f9e657a 100644 --- a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java +++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java @@ -65,7 +65,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; /** - * @author bakksjo + * @author Oyvind Bakksjo * @author Simon Thoresen Hult */ public class HttpServerTest { @@ -466,6 +466,20 @@ public class HttpServerTest { assertThat(driver.close(), is(true)); } + @Test + public void requireThatGzipEncodingRequestsAreAutomaticallyDecompressed() throws Exception { + final TestDriver driver = TestDrivers.newInstance(new ParameterPrinterRequestHandler()); + final String requestContent = generateContent('a', 30); + final ResponseValidator response = + driver.client().newPost("/status.html") + .addHeader(CONTENT_TYPE, APPLICATION_X_WWW_FORM_URLENCODED) + .setGzipContent(requestContent) + .execute(); + response.expectStatusCode(is(OK)) + .expectContent(startsWith('{' + requestContent + "=[]}")); + assertThat(driver.close(), is(true)); + } + private static RequestHandler mockRequestHandler() { final RequestHandler mockRequestHandler = mock(RequestHandler.class); when(mockRequestHandler.refer()).thenReturn(References.NOOP_REFERENCE); diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/SimpleHttpClient.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/SimpleHttpClient.java index e9c73c68e25..1836a73d2fd 100644 --- a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/SimpleHttpClient.java +++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/SimpleHttpClient.java @@ -6,6 +6,7 @@ import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.GzipCompressingEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; @@ -155,6 +156,11 @@ public class SimpleHttpClient { return this; } + public RequestExecutor setGzipContent(String content) { + this.entity = new GzipCompressingEntity(new StringEntity(content, StandardCharsets.UTF_8)); + return this; + } + public RequestExecutor setBinaryContent(final byte[] content) { this.entity = new ByteArrayEntity(content); return this; |