レスポンスヘッダにExpiresやCache-Controlを追加することで、ブラウザのキャッシュを有効活用し、ダウンロードの時間をなくす事でウェブの高速化を実現できます。またサーバ側にとってもリクエスト数を減らす事ができ、負荷の削減にもなります

ApacheにはExpiresやCache-Controlを付加するmod_expiresというモジュールがありますが、Plackにはまだなかったので作ってみました。VarnishのようにWebサーバ機能を持たないリバースプロキシを使う場合には、便利なんじゃないかなぁと思います

CPANにリリース済みです http://search.cpan.org/dist/Plack-Middleware-Expires/

使い方

builder {
    enable 'Expires',
        content_type => [ 'text/css', 'application/javascript', qr!^image/! ],
        expires => 'access plus 3 months';
    enable 'Plack::Middleware::Static',
        path => qr{^/(favicon\.ico$|static/)}, root => './htdocs';
    $app;
}

content_typeでヘッダを付加するMIME typeを指定します。 pathを限定するためにPlack::Builder::Conditionals(github)と一緒に組み合わせたら便利かも

content_type => 'text/css'
content_type => qr!^image!
content_type => [ 'text/css', 'application/javascript', qr!^image/! ]

スカラ値、Regexp、もしくはそれらが入る配列のリファレンスを指定できます

expiresには、Apacheのmod_expiresと同じフォーマットでキャッシュの有効時間を入れます

expires => 'M3600' #最終更新時間 + 1時間(3600秒)
expires => 'A86400' # アクセス時間 + 1日
expires => 'modification plus 3 years 3 month 3 day' #最終更新時間 + 3年3ヶ月3日
expires => 'access plus 3 days' #アクセス時間 + 3日

などと書けます。最終更新時間はLast-Modifiedヘッダからとるため、Last-Modifiedヘッダが存在しないときには機能が働きません。

また、Expiresが有効となるのは、レスポンスのステータスが200系や300系の時だけで、エラー時には動きません。また既にあるExpiresヘッダを上書きしません。

このブログ記事について

このページは、Masahiro Naganoが2010年7月21日 18:36に書いたブログ記事です。

ひとつ前のブログ記事は「Plack::Builderのenable_ifよりも簡単に、指定した条件下でmiddlewareを有効にするモジュール 」です。

次のブログ記事は「Yokohama.pm #6でcloudforecastについて喋って来た」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja