The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

HTTP::CDN - Serve static files with unique URLs and far-future expiry

SYNOPSIS

To use this module in your Catalyst app, see Catalyst::Plugin::CDN. For other uses, see below:

  my $cdn = HTTP::CDN->new(
      root => '/path/to/static/root',
      base => '/cdn/',
      plugins => [qw(
          CSS::LESSp
          CSS
          CSS::Minifier::XS
          JavaScript::Minifier::XS
      )],
  );

  # Generate a URL based on hashed file contents

  say $cdn->resolve('css/style.less');  # e.g.: "/cdn/css/style.B97EA317759D.less"

  # Find source file, apply plugins and return content

  my ($uri, $hash) = $cdn->unhash_uri('css/style.B97EA317759D.less');
  return $cdn->filedata($uri);

In a real application you'd also want to add a Content-Type header using the MIME type set by the plugins as well as headers for cache-control and expiry. You can trivially mount a handler to do all of that for the static content in your Plack app (using the HTTP::CDN object as defined above):

  use Plack::Builder;

  my $app = sub {
      # Define Plack app here
  };

  builder {
      mount '/cdn/' => $cdn->to_plack_app;
      mount '/'     => $app;
  }

DESCRIPTION

Web application plugin for serving static files with content-hashed unique URLs and far-future expiry.

Additionally provides automatic minification/compiling of css/less/javascript.

METHODS

new

Construct an object for generating URL paths and also for producing the response content for a requested URL. The constructor accepts these names options:

root

Filesystem path to the directory where your static files are stored.

This option is required and has no default value.

base

URL path prefix to be added when generating unique URL paths. Defaults to no prefix. A typical value might be '/cdn/'.

plugins

A list of plugins that you wish to enable. Default value is: [ 'HTTP::CDN::CSS' ].

resolve

Takes a URL path of a file in the root directory and returns a CDN URL with base prefix and content hash added.

unhash_uri

Takes a URI path and returns the same path with content hash removed. In list context, the hash is also returned.

Note: This method does not attempt to strip the base prefix (e.g.: /cdn/) from the URI path as that would usually have been done already by the application framework's routing layer.

fileinfo

Takes a URI path (with hash removed) and returns a hash of information about the file and its contents.

filedata

Takes a URI path (with hash removed) and returns the contents of that file with any plug-in transformations applied.

to_plack_app

Returns a subroutine reference that can be used as a Plack application - typically 'mounted' on a URL path like /cdn/ as shown in the SYNOPSIS.

AUTHOR

Martyn Smith <martyn@dollyfish.net.nz>

COPYRIGHT AND LICENSE

Copyright (C) 2010-2012 by Martyn Smith

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.