The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package TestApp::Controller::Root;
use Moose;
use namespace::autoclean;

BEGIN { extends 'Catalyst::Controller' }

__PACKAGE__->config(namespace => q{});

sub base : Chained('/') PathPart('') CaptureArgs(0) {}

# your actions replace this one
sub main : Chained('base') PathPart('') Args(0) {
    my ($self, $c) = @_;

    my $reqs = $c->req->params;
    foreach my $hdr (qw( ETag Expires Last-Modified )) {
	if (exists $reqs->{$hdr}) {
	    $c->res->header( $hdr => $reqs->{$hdr} );
	}
    }

    if ($reqs->{Status}) {
	$c->res->code($reqs->{Status});
    }

    my %options = ( );

    foreach my $key (qw( no_etag no_expires no_last_modified strong no_preempt_head )) {
	if (exists $reqs->{$key}) {
	    $options{$key} = $reqs->{$key};
	}
    }

    if ($c->not_cached(\%options)) {
	$c->res->body('<p>Content Ok</p>');
    }
}

__PACKAGE__->meta->make_immutable;