org.eclipse.jetty.servlets

## Class GzipFilter

- java.lang.Object
- - org.eclipse.jetty.servlets.UserAgentFilter
  - - org.eclipse.jetty.servlets.GzipFilter

All Implemented Interfaces:
  javax.servlet.Filter

Direct Known Subclasses:
  IncludableGzipFilter

    public class GzipFilter
    extends UserAgentFilter

GZIP Filter This filter will gzip or deflate the content of a response if:

- The filter is mapped to a matching path
- accept-encoding header is set to either gzip, deflate or a combination of those
- The response status code is >=200 and <300
- The content length is unknown or more than the `minGzipSize` initParameter or the minGzipSize is 0(default)
- The content-type is in the comma separated list of mimeTypes set in the `mimeTypes` initParameter or if no mimeTypes are defined the content-type is not "application/gzip"
- No content-encoding is specified by the resource

If both gzip and deflate are specified in the accept-encoding header, then gzip will be used.

Compressing the content can greatly improve the network bandwidth usage, but at a cost of memory and CPU cycles. If this filter is mapped for static content, then use of efficient direct NIO may be prevented, thus use of the gzip mechanism of the `DefaultServlet` is advised instead.

This filter extends `UserAgentFilter` and if the the initParameter `excludedAgents` is set to a comma separated list of user agents, then these agents will be excluded from gzip content.

Init Parameters:

     bufferSize                 The output buffer size. Defaults to 8192. Be careful as values <= 0 will lead to an
                                IllegalArgumentException.
                                See: GZIPOutputStream.GZIPOutputStream(java.io.OutputStream, int)
                                and: DeflaterOutputStream.DeflaterOutputStream(java.io.OutputStream, Deflater, int)

     minGzipSize                Content will only be compressed if content length is either unknown or greater
                                than minGzipSize.

     deflateCompressionLevel    The compression level used for deflate compression. (0-9).
                                See: Deflater.Deflater(int, boolean)

     deflateNoWrap              The noWrap setting for deflate compression. Defaults to true. (true/false)
                                See: Deflater.Deflater(int, boolean)

     methods                    Comma separated list of HTTP methods to compress. If not set, only GET requests are compressed.

     mimeTypes                  Comma separated list of mime types to compress. See description above.

     excludedAgents             Comma separated list of user agents to exclude from compression. Does a
                                String.contains(CharSequence) to check if the excluded agent occurs
                                in the user-agent header. If it does -> no compression

     excludeAgentPatterns       Same as excludedAgents, but accepts regex patterns for more complex matching.

     excludePaths               Comma separated list of paths to exclude from compression.
                                Does a String.startsWith(String) comparison to check if the path matches.
                                If it does match -> no compression. To match subpaths use excludePathPatterns
                                instead.

     excludePathPatterns        Same as excludePath, but accepts regex patterns for more complex matching.

     vary                       Set to the value of the Vary header sent with responses that could be compressed.  By default it is
                                set to 'Vary: Accept-Encoding, User-Agent' since IE6 is excluded by default from the excludedAgents.
                                If user-agents are not to be excluded, then this can be set to 'Vary: Accept-Encoding'.  Note also
                                that shared caches may cache copies of a resource that is varied by User-Agent - one per variation of
                                the User-Agent, unless the cache does some normalization of the UA string.

### Field Summary

Fields
`protected int` `_bufferSize`
`protected javax.servlet.ServletContext` `_context`
`protected int` `_deflateCompressionLevel`
`protected boolean` `_deflateNoWrap`
`protected Set<Pattern>` `_excludedAgentPatterns`
`protected Set<String>` `_excludedAgents`
`protected Set<Pattern>` `_excludedPathPatterns`
`protected Set<String>` `_excludedPaths`
`protected Set<String>` `_methods`
`protected Set<String>` `_mimeTypes`
`protected int` `_minGzipSize`
`protected String` `_vary`
`static String` `DEFLATE`
`static String` `ETAG`
`static String` `ETAG_DEFLATE`
`static String` `ETAG_GZIP`
`static String` `GZIP`

### Constructor Summary

Constructors
Constructor and Description
`GzipFilter()`

### Method Summary

Methods
`protected void` `configureWrappedResponse(CompressedResponseWrapper wrappedResponse)`
`protected CompressedResponseWrapper` `createWrappedResponse(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, String compressionType)`
`void` `destroy()`
`void` `doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res, javax.servlet.FilterChain chain)`
`void` `init(javax.servlet.FilterConfig filterConfig)`

### Methods inherited from class org.eclipse.jetty.servlets.UserAgentFilter

`getUserAgent, getUserAgent`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### GZIP

    public static final String GZIP

See Also:
  Constant Field Values

#### ETAG_GZIP

    public static final String ETAG_GZIP

See Also:
  Constant Field Values

#### DEFLATE

    public static final String DEFLATE

See Also:
  Constant Field Values

#### ETAG_DEFLATE

    public static final String ETAG_DEFLATE

See Also:
  Constant Field Values

#### ETAG

    public static final String ETAG

See Also:
  Constant Field Values

#### _context

    protected javax.servlet.ServletContext _context

#### _mimeTypes

    protected Set<String> _mimeTypes

#### _bufferSize

    protected int _bufferSize

#### _minGzipSize

    protected int _minGzipSize

#### _deflateCompressionLevel

    protected int _deflateCompressionLevel

#### _deflateNoWrap

    protected boolean _deflateNoWrap

#### _methods

    protected final Set<String> _methods

#### _excludedAgents

    protected Set<String> _excludedAgents

#### _excludedAgentPatterns

    protected Set<Pattern> _excludedAgentPatterns

#### _excludedPaths

    protected Set<String> _excludedPaths

#### _excludedPathPatterns

    protected Set<Pattern> _excludedPathPatterns

#### _vary

    protected String _vary

### Constructor Detail

#### GzipFilter

    public GzipFilter()

### Method Detail

#### init

    public void init(javax.servlet.FilterConfig filterConfig)
              throws javax.servlet.ServletException

Specified by:
  `init` in interface `javax.servlet.Filter`
Overrides:
  `init` in class `UserAgentFilter`
Throws:
  `javax.servlet.ServletException`
See Also:
  `UserAgentFilter.init(javax.servlet.FilterConfig)`

#### destroy

    public void destroy()

Specified by:
  `destroy` in interface `javax.servlet.Filter`
Overrides:
  `destroy` in class `UserAgentFilter`
See Also:
  `UserAgentFilter.destroy()`

#### doFilter

    public void doFilter(javax.servlet.ServletRequest req,
                javax.servlet.ServletResponse res,
                javax.servlet.FilterChain chain)
                  throws IOException,
                         javax.servlet.ServletException

Specified by:
  `doFilter` in interface `javax.servlet.Filter`
Overrides:
  `doFilter` in class `UserAgentFilter`
Throws:
  `IOException`
  `javax.servlet.ServletException`
See Also:
  `UserAgentFilter.doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)`

#### createWrappedResponse

    protected CompressedResponseWrapper createWrappedResponse(javax.servlet.http.HttpServletRequest request,
                                                  javax.servlet.http.HttpServletResponse response,
                                                  String compressionType)

#### configureWrappedResponse

    protected void configureWrappedResponse(CompressedResponseWrapper wrappedResponse)