Content-Encoding: deflateなHTTPレスポンスを作る

Content-Encoding: deflateなHTTPレスポンスを返させる簡単な方法はないかなと探してみたらRackがサポートしていた。どうやるかというと:

use Rack::Deflater

これだけ。ruファイルに書いておけばよい。発端がちょっとしたテストのためだったので、内容はなんでもよく、とにかくdeflateで返してくれれば十分というわけで、こんなのを書いて目的を達成できた:

module Rack
  class Foo
    def call(env)
      r = Response.new
      r.write "abc123"*100
      r.finish
    end
  end
end
use Rack::Deflater
run Rack::Foo.new

実際にアクセスしてみるとこうなる:

$ ruby -r open-uri -e 'open("http://localhost:9292/"){|h| p h.read}'
"abc123abc123 ...(略)..."
$ ruby -r open-uri -e 'open("http://localhost:9292/", "Accept-Encoding"=>"deflate"){|h| p h.read}'
"\355\3011\001\000 ...(略)..."