summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2020-01-16 11:01:38 -0800
committerJeremy Evans <code@jeremyevans.net>2020-01-16 11:04:56 -0800
commit3b15befa7f741e52ebe7bf9f648460a06f3915c8 (patch)
tree5709369f9ae370f2e0ceb5a505fd352f279e1ed2
parente24d1a03d752528e6599760e675eda2f56732dc6 (diff)
downloadrack-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.rb4
-rw-r--r--test/spec_deflater.rb9
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' => {