@nqounetです。
Perlの仕事で、Amon2を使ってサイトを作っていました。
その際に、動画ファイルをログイン中しか見れないようにするために、動画ファイルを直接送信する必要がありました。
その時に使った便利なモジュールを紹介します。
Plack::App::File::Range
Plack::App::File::Range - Serve static files with support for Range requests
Plack::App::File::Range - Serve static files with support for Range requests - metacpan.org
Plack::App::File::Range
は、レスポンスをHTTPのRange対応にしてくれるモジュールです。
あまり難しいことはわかりませんが、動画などを直接送信する場合には使っておいたほうが良いです。
簡単な使い方
本来はPSGIアプリとしてそのまま使えるのですが、認証を通してから送信したいので、Amon2のコントローラーの中でレスポンス全体を作成しています。
|
|
説明的に言うと、Plack::App::File::Range
のインスタンスからserve_path
メソッドに「PSGI環境変数」と「送信したいファイルのパス」を渡すと、HTTPのRangeに対応したPSGI仕様のレスポンスが返ってきます。
そして、Amon2のコントローラーの、create_response
メソッドを使ってそのレスポンスをそのまま返してやります。
リファレンスのまま渡す方法もあるのかもしれませんが、そのレベルには到達できませんでした。
WAFのあるべき姿の一つ
Amon2で、コントローラーから直接レスポンスを返せるのは良いと思いました。
何かをラップするようなモジュールは、いざという時のためにラップしない手段を持っておく、ということが結構大事だなと感じました。
例えば、全てがrender_*
のようなものを経由する必要があった場合、Plack::App::File::Range
みたいなモジュールは使えなかったわけで、泣きながらRangeに対応していたことでしょう。