diff --git a/lib/net/http/header.rb b/lib/net/http/header.rb index 912419d..9cbd7d55 100644 --- a/lib/net/http/header.rb +++ b/lib/net/http/header.rb @@ -294,6 +294,12 @@ module Net::HTTPHeader m[1].to_i .. m[2].to_i end + def content_range_unit + return nil unless @header['content-range'] + match = /(?\S+)\s/i.match(self['Content-Range']) + match[:unit] + end + # The length of the range represented in Content-Range: header. def range_length r = content_range() or return nil diff --git a/lib/net/http/response.rb b/lib/net/http/response.rb index 126c221..2f825b9 100644 --- a/lib/net/http/response.rb +++ b/lib/net/http/response.rb @@ -248,7 +248,7 @@ class Net::HTTPResponse def inflater # :nodoc: return yield @socket unless Net::HTTP::HAVE_ZLIB return yield @socket unless @decode_content - return yield @socket if self['content-range'] + return yield @socket if content_range_unit == 'bytes' v = self['content-encoding'] case v && v.downcase diff --git a/test/net/http/test_httpresponse.rb b/test/net/http/test_httpresponse.rb index 404c7ae..e6ec041 100644 --- a/test/net/http/test_httpresponse.rb +++ b/test/net/http/test_httpresponse.rb @@ -237,6 +237,34 @@ EOS assert_equal "\x1F\x8B\b\x00\x00\x00\x00\x00\x00\x03", body end + def test_read_body_content_encoding_ignore_custom_content_range + io = dummy_io(<