§Configuring gzip encoding
Play provides a gzip filter that can be used to gzip responses.
§Enabling the gzip filter
To enable the gzip filter, add the Play filters project to your libraryDependencies
in build.sbt
:
libraryDependencies += filters
Now add the gzip filter to your filters, which is typically done by creating a Filters
class in the root of your project:
- Scala
-
import javax.inject.Inject import play.api.http.DefaultHttpFilters import play.filters.gzip.GzipFilter class Filters @Inject() (gzipFilter: GzipFilter) extends DefaultHttpFilters(gzipFilter)
- Java
-
import play.mvc.EssentialFilter; import play.filters.gzip.GzipFilter; import play.http.HttpFilters; import javax.inject.Inject; public class Filters implements HttpFilters { private EssentialFilter[] filters; @Inject public Filters(GzipFilter gzipFilter) { filters = new EssentialFilter[] { gzipFilter.asJava() }; } public EssentialFilter[] filters() { return filters; } }
The Filters
class can either be in the root package, or if it has another name or is in another package, needs to be configured using play.http.filters
in application.conf
:
play.http.filters = "filters.MyFilters"
§Configuring the gzip filter
The gzip filter supports a small number of tuning configuration options, which can be configured from application.conf
. To see the available configuration options, see the Play filters reference.conf
.
§Controlling which responses are gzipped
To control which responses are and aren’t implemented, use the shouldGzip
parameter, which accepts a function of a request header and a response header to a boolean.
For example, the code below only gzips HTML responses:
- Scala
-
new GzipFilter(shouldGzip = (request, response) => response.body.contentType.exists(_.startsWith("text/html")))
- Java
-
GzipFilter gzipFilter = new GzipFilter( new GzipFilterConfig().withShouldGzip((req, res) -> res.body().contentType().orElse("").startsWith("text/html") ), materializer );