diff --git a/README.md b/README.md index addeadd..f0d6aee 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,14 @@ If you'd like to bypass SSL verification reverse_proxy "http://localhost:8000", verify_ssl: false ``` +If you'd like to allow the proxy to request compressed resources by forwarding the `Accept-Encoding` header + +```ruby +reverse_proxy "http://localhost:8000", compression: :passthrough +# Note that your controller's response will only be compressed +# if the original response from localhost:8000 is compressed! +``` + If you'd like to customize the options passed into the [HTTP session](https://ruby-doc.org/stdlib-2.4.0/libdoc/net/http/rdoc/Net/HTTP.html#start-method) ```ruby diff --git a/lib/reverse_proxy/client.rb b/lib/reverse_proxy/client.rb index b752f64..bcc02b2 100644 --- a/lib/reverse_proxy/client.rb +++ b/lib/reverse_proxy/client.rb @@ -38,12 +38,13 @@ module ReverseProxy def request(env, options = {}, &block) options.reverse_merge!( - headers: {}, - http: {}, - path: nil, - username: nil, - password: nil, - verify_ssl: true + headers: {}, + http: {}, + path: nil, + username: nil, + password: nil, + verify_ssl: true, + compression: :disabled ) source_request = Rack::Request.new(env) @@ -73,11 +74,14 @@ module ReverseProxy # Hold the response here target_response = nil - # Don't encode response/support compression which was - # causing content length not match the actual content - # length of the response which ended up causing issues - # within Varnish (503) - target_request['Accept-Encoding'] = nil + case options[:compression] + when :passthrough + # Pass along the "Accept-Encoding" header from the source request as-is, + # so we don't need to change anything + when :disabled, false, nil + # Remove the "Accept-Encoding" header if compression is disabled + target_request['Accept-Encoding'] = nil + end http_options = {} http_options[:use_ssl] = (uri.scheme == "https")