Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Bartel2014-07-09 08:01:07 +0000
committerJan Bartel2014-07-09 08:01:07 +0000
commit5969638e69df37fdb0ad442ca6188e2b507a04a1 (patch)
tree032b6b47e80fa7094a00cc33e13000b0073d7388 /jetty-servlets
parent10da0e1015effb00d650e7e058a580f0520a9854 (diff)
downloadorg.eclipse.jetty.project-5969638e69df37fdb0ad442ca6188e2b507a04a1.tar.gz
org.eclipse.jetty.project-5969638e69df37fdb0ad442ca6188e2b507a04a1.tar.xz
org.eclipse.jetty.project-5969638e69df37fdb0ad442ca6188e2b507a04a1.zip
439201 GzipFilter and AsyncGzipFilter should strip charset from Content-Type before making exclusion comparison in doFilter
Diffstat (limited to 'jetty-servlets')
-rw-r--r--jetty-servlets/src/main/java/org/eclipse/jetty/servlets/AsyncGzipFilter.java18
-rw-r--r--jetty-servlets/src/main/java/org/eclipse/jetty/servlets/GzipFilter.java16
-rw-r--r--jetty-servlets/src/test/java/org/eclipse/jetty/servlets/GzipFilterDefaultTest.java54
-rw-r--r--jetty-servlets/src/test/java/org/eclipse/jetty/servlets/gzip/GzipTester.java6
4 files changed, 80 insertions, 14 deletions
diff --git a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/AsyncGzipFilter.java b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/AsyncGzipFilter.java
index 6eb7c152aa..7b62a57bd7 100644
--- a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/AsyncGzipFilter.java
+++ b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/AsyncGzipFilter.java
@@ -317,18 +317,22 @@ public class AsyncGzipFilter extends UserAgentFilter implements GzipFactory
super.doFilter(request,response,chain);
return;
}
-
+
// Exclude non compressible mime-types known from URI extension. - no Vary because no matter what client, this URI is always excluded
if (_mimeTypes.size()>0 && _excludeMimeTypes)
{
String mimeType = _context.getMimeType(request.getRequestURI());
-
- if (mimeType!=null && _mimeTypes.contains(mimeType))
+
+ if (mimeType!=null)
{
- LOG.debug("{} excluded by path suffix {}",this,request);
- // handle normally without setting vary header
- super.doFilter(request,response,chain);
- return;
+ mimeType = MimeTypes.getContentTypeWithoutCharset(mimeType);
+ if (_mimeTypes.contains(mimeType))
+ {
+ LOG.debug("{} excluded by path suffix {}",this,request);
+ // handle normally without setting vary header
+ super.doFilter(request,response,chain);
+ return;
+ }
}
}
diff --git a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/GzipFilter.java b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/GzipFilter.java
index 69f2f62f11..0343034d33 100644
--- a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/GzipFilter.java
+++ b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/GzipFilter.java
@@ -300,17 +300,21 @@ public class GzipFilter extends UserAgentFilter
super.doFilter(request,response,chain);
return;
}
-
+
// Exclude non compressible mime-types known from URI extension. - no Vary because no matter what client, this URI is always excluded
if (_mimeTypes.size()>0 && _excludeMimeTypes)
{
String mimeType = _context.getMimeType(request.getRequestURI());
-
- if (mimeType!=null && _mimeTypes.contains(mimeType))
+
+ if (mimeType!=null)
{
- // handle normally without setting vary header
- super.doFilter(request,response,chain);
- return;
+ mimeType = MimeTypes.getContentTypeWithoutCharset(mimeType);
+ if (_mimeTypes.contains(mimeType))
+ {
+ // handle normally without setting vary header
+ super.doFilter(request,response,chain);
+ return;
+ }
}
}
diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/GzipFilterDefaultTest.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/GzipFilterDefaultTest.java
index bdcac4218d..0454bb5ee4 100644
--- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/GzipFilterDefaultTest.java
+++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/GzipFilterDefaultTest.java
@@ -389,6 +389,60 @@ public class GzipFilterDefaultTest
}
}
+
+ @Test
+ public void testIsNotGzipCompressedByExcludedContentType() throws Exception
+ {
+ GzipTester tester = new GzipTester(testingdir, compressionType);
+ tester.setGzipFilterClass(testFilter);
+
+ int filesize = tester.getOutputBufferSize() * 4;
+ tester.prepareServerFile("test_quotes.txt", filesize);
+
+
+ FilterHolder holder = tester.setContentServlet(org.eclipse.jetty.servlet.DefaultServlet.class);
+ holder.setInitParameter("excludedMimeTypes","text/plain");
+
+ try
+ {
+ tester.start();
+ HttpTester.Response http = tester.assertIsResponseNotGzipCompressed("GET","test_quotes.txt", filesize, HttpStatus.OK_200);
+ Assert.assertNull(http.get("Vary"));
+ }
+ finally
+ {
+ tester.stop();
+ }
+ }
+
+
+ @Test
+ public void testIsNotGzipCompressedByExcludedContentTypeWithCharset() throws Exception
+ {
+ GzipTester tester = new GzipTester(testingdir, compressionType);
+ tester.setGzipFilterClass(testFilter);
+
+ int filesize = tester.getOutputBufferSize() * 4;
+ tester.prepareServerFile("test_quotes.txt", filesize);
+ tester.addMimeType("txt","text/plain;charset=UTF-8");
+
+ FilterHolder holder = tester.setContentServlet(org.eclipse.jetty.servlet.DefaultServlet.class);
+ holder.setInitParameter("excludedMimeTypes","text/plain");
+
+ try
+ {
+ tester.start();
+ HttpTester.Response http = tester.assertIsResponseNotGzipCompressed("GET","test_quotes.txt", filesize, HttpStatus.OK_200);
+ Assert.assertNull(http.get("Vary"));
+ }
+ finally
+ {
+ tester.stop();
+ }
+ }
+
+
+
@Test
public void testGzipCompressedByContentTypeWithEncoding() throws Exception
{
diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/gzip/GzipTester.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/gzip/GzipTester.java
index 657c6dfc85..66bf12a58b 100644
--- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/gzip/GzipTester.java
+++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/gzip/GzipTester.java
@@ -395,7 +395,6 @@ public class GzipTester
String uri = "/context/"+filename;
HttpTester.Response response = executeRequest(method,uri);
assertResponseHeaders(expectedFilesize,status,response);
-
// Assert that the contents are what we expect.
if (filename != null)
{
@@ -636,6 +635,11 @@ public class GzipTester
{
this.userAgent = ua;
}
+
+ public void addMimeType (String extension, String mimetype)
+ {
+ this.tester.getContext().getMimeTypes().addMimeMapping(extension, mimetype);
+ }
public void start() throws Exception
{

Back to the top