A gzip filter.
This filter may gzip the responses for any requests that aren't HEAD requests and specify an accept encoding of gzip.
It will only gzip non chunked responses. Chunked responses are often comet responses, gzipping will interfere in
that case. If you want to gzip a chunked response, you can apply the gzip enumeratee manually to the enumerator.
For non chunked responses, it won't gzip under the following conditions:
- The response code is 204 or 304 (these codes MUST NOT contain a body, and an empty gzipped response is 20 bytes
- The response already defines a Content-Encoding header
- The response content type is text/event-stream
- A custom shouldGzip function is supplied and it returns false
Since gzipping changes the content length of the response, this filter may do some buffering. If a content length
is sent by the action, that content length is filtered out and ignored. If the connection flag on the result is
Close, the filter will not attempt to buffer, and will simply rely on the closing the response to signify the end
of the response. Otherwise, it will buffer up to the configured chunkedThreshold, which defaults to 100kb. If the
response fits in that buffer, the filter will send the content length, otherwise it falls back to sending a chunked
response, or if the protocol is HTTP/1.0, it closes the connection at the end of the response.