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 ...(略)..."