in zuul-core/src/main/java/com/netflix/zuul/filters/common/GZipResponseFilter.java [66:96]
public boolean shouldFilter(HttpResponseMessage response) {
if (!ENABLED.get() || !response.hasBody() || response.getContext().isInBrownoutMode()) {
return false;
}
if (response.getContext().get(CommonContextKeys.GZIPPER) != null) {
return true;
}
// A flag on SessionContext can be set to override normal mechanism of checking if client accepts gzip.;
HttpRequestInfo request = response.getInboundRequest();
Boolean overrideIsGzipRequested =
(Boolean) response.getContext().get(CommonContextKeys.OVERRIDE_GZIP_REQUESTED);
boolean isGzipRequested = (overrideIsGzipRequested == null)
? HttpUtils.acceptsGzip(request.getHeaders())
: overrideIsGzipRequested;
// Check the headers to see if response is already gzipped.
Headers respHeaders = response.getHeaders();
boolean isResponseCompressed = HttpUtils.isCompressed(respHeaders);
// Decide what to do.;
boolean shouldGzip = isGzippableContentType(response)
&& isGzipRequested
&& !isResponseCompressed
&& isRightSizeForGzip(response);
if (shouldGzip) {
response.getContext().set(CommonContextKeys.GZIPPER, getGzipper());
}
return shouldGzip;
}