2013-09-18(水) [長年日記]
■ HTTPリクエストの圧縮をサポートする
HTTPクライアントから大きなデータをPOSTするときに圧縮可能ならそうして欲しい場合があって(もちろんブラウザはそんなことしてくれないので専用クライアントを使う前提)、サーバアプリは圧縮・未圧縮の状況にかかわりなく書きたいので、その部分だけRackミドルウェアにしてみた。ちなみにリクエストではなくてレスポンスなら普通の話なので何も考えずにRack::Deflaterを使えば良い。
最初、Rackでリクエストのbodyを操作する方法がわからなくてTwitterでつぶやいたら@moroが教えてくれたので解決。いつもいつも助かります(^^;
こんな感じで使える:
require 'rack/request_decompressor' use Rack::RequestDecompressor
クライアントはContent-Encodingヘッダを追加してPOSTすればよろしい。
これは便利そう
「大きなデータ」と言いつつ全部オンメモリで処理してるあたりがまだアレだけど。
gem化した: https://github.com/tdtds/rack-request_decompressor