diff options
author | Jeremy Evans <code@jeremyevans.net> | 2020-01-16 11:01:38 -0800 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2020-01-16 11:04:56 -0800 |
commit | 3b15befa7f741e52ebe7bf9f648460a06f3915c8 (patch) | |
tree | 5709369f9ae370f2e0ceb5a505fd352f279e1ed2 | |
parent | e24d1a03d752528e6599760e675eda2f56732dc6 (diff) | |
download | rack-3b15befa7f741e52ebe7bf9f648460a06f3915c8.tar.gz |
Skip deflating in Rack::Deflater if Content-Length is 0
Fixes usage with Rack::Sendfile.
Fixes #1142
-rw-r--r-- | lib/rack/deflater.rb | 4 | ||||
-rw-r--r-- | test/spec_deflater.rb | 9 |
2 files changed, 13 insertions, 0 deletions
diff --git a/lib/rack/deflater.rb b/lib/rack/deflater.rb index 4da07d55..9a30c017 100644 --- a/lib/rack/deflater.rb +++ b/lib/rack/deflater.rb @@ -124,6 +124,10 @@ module Rack # Skip if @condition lambda is given and evaluates to false return false if @condition && !@condition.call(env, status, headers, body) + # No point in compressing empty body, also handles usage with + # Rack::Sendfile. + return false if headers[CONTENT_LENGTH] == '0' + true end end diff --git a/test/spec_deflater.rb b/test/spec_deflater.rb index 75244dcc..378e2cf3 100644 --- a/test/spec_deflater.rb +++ b/test/spec_deflater.rb @@ -362,6 +362,15 @@ describe Rack::Deflater do verify(200, 'Hello World!', { 'gzip' => nil }, options) end + it "not deflate if content-length is 0" do + options = { + 'response_headers' => { + 'Content-Length' => '0' + }, + } + verify(200, '', { 'gzip' => nil }, options) + end + it "deflate response if :if lambda evaluates to true" do options = { 'deflater_options' => { |