-
Notifications
You must be signed in to change notification settings - Fork 689
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
enable automatic gzip compression of responses #731
Conversation
This unconditionally enables envoys gzip http_filter[1], which will compress responses if the request indicates it can handle it (via a "accept-encoding: gzip" request header). I've enabled it with no options, which means it gets the defaults, as listed at [2]. In envoy 1.7.0, they're: { "memory_level": 5, "content_length": 30", "compression_level": "DEFAULT", "compression_strategy": "DEFAULT", "content_type": [“application/javascript”, “application/json”, “application/xhtml+xml”, “image/svg+xml”, “text/css”, “text/html”, “text/plain”, “text/xml”], "disable_on_etag_header": false, "remove_accept_encoding_header": false, "window_bits": 12 } Note the list of content types that will be compressed. It's possible some users will want to customise this list, but for now I haven't exposed that option. Fixes projectcontour#310 [1] https://www.envoyproxy.io/docs/envoy/latest/configuration/http_filters/gzip_filter [2] https://www.envoyproxy.io/docs/envoy/latest/api-v2/config/filter/http/gzip/v2/gzip.proto Signed-off-by: James Healy <james@yob.id.au>
To test this, I built a docker image with this branch and pushed it to a test cluster on GKE. Behind contour was a mini nginx server that returned a plain text debugging response. Unfortunately, compressed responses make curl unhappy and I'm not sure why. A request with curl that doesn't opt-in to compression:
A request from curl that opts-in to compression:
With wget, compression not opted in to:
With wget, compression opted in to:
|
Thank you very much for this. I'm glad this was a simple change :) |
No worries, it was mostly out of self interest. We're migrating to contour, and had noticed a performance regression compared to our older infrastructure. The error from curl is a worry though. I'd like to know why it's unhappy with gzipped responses. |
@yob this looks fine to me. the curl error is caused, i think, by manually forcing the Accept-encoding header. This causes the remote to send back compressed data which causes curl to freak out because it doesn't want to write binary data to a file.
works fine. My version of curl also supports a --compressed flag which handles compression transparently. |
If I wanted to enable compression for another content type, how should I proceed? |
This unconditionally enables envoys gzip http_filter, which will compress responses if the request indicates it can handle it (via a "accept-encoding: gzip" request header).
I've enabled it with no options, which means it gets the defaults, as
listed here. In envoy 1.7.0, they're:
Note the list of content types that will be compressed. It's possible some users will want to customise this list, but for now I haven't exposed that option.
Fixes #310
Signed-off-by: James Healy james@yob.id.au