Plackで静的コンテンツのMIME型を指定する方法

Apache の設定ファイルおける AddType を Plack でどうやるのか。

Plack::App::File (あるいはそれをラップしている Plack::Middleware::Static) は、拡張子から Content-Type を決定するのに MIME::Types を使っている thanks to miyagawa-san。

なので、たとえば Apache

AddType application/x-xpinstall .xpi
AddType application/octet-stream .msi

に対応する Plack::App::File の設定は、

MIME::Types->new();
MIME::Types->addType(
    MIME::Type->new(
        type       => 'application/x-xpinstall',
        extensions => [ qw(xpi) ],
    ),
    MIME::Type->new(
        type       => 'application/octet-stream',
        extensions => [ qw(msi) ],
    ),
);

23:19追記: 先頭で MIME::Types->new() しているのは、new を1回も呼ばないうちに addType しちゃうと、デフォルトの型定義が読み込まれないため。

12/26追記: Plack-0.9025 以降では Plack::MIME に変更に。以下のような形で使います。

Plack::MIME->add_type('.xpi' => 'application/x-xpinstall');
Plack::MIME->add_type('.msi' => 'application/octet-stream');