diff --git a/lib/RenderApp.pm b/lib/RenderApp.pm index f129404a0..f3b97c4d1 100644 --- a/lib/RenderApp.pm +++ b/lib/RenderApp.pm @@ -69,6 +69,37 @@ sub startup { }); } + # Add Cache-Control and Expires headers to static content from webwork2_files + if (my $STATIC_EXPIRES = $self->config('STATIC_EXPIRES')) { + $STATIC_EXPIRES = int( $STATIC_EXPIRES ); + my $cache_control_setting = "max-age=$STATIC_EXPIRES"; + my $no_cache_setting = "max-age=1, no-cache"; + $self->hook(after_dispatch => sub { + my $c = shift; + + # Only process if file requested is under webwork2_files + unless ( $c->req->url->path =~ '^/webwork2_files' ) { + return; + } + + if ( $c->req->url->path =~ '/tmp/renderer' ) { + # Treat problem generated files as already expired. + # They should not be cached. + $c->res->headers->cache_control( $no_cache_setting ); + $c->res->headers->header(Expires => + Mojo::Date->new(time - 86400) # expired 24 hours ago + ); + } else { + # Standard "static" files. + # They can be cached + $c->res->headers->cache_control( $cache_control_setting ); + $c->res->headers->header(Expires => + Mojo::Date->new(time + $STATIC_EXPIRES) + ); + } + }); + } + # Models $self->helper(newProblem => sub { shift; RenderApp::Model::Problem->new(@_) }); diff --git a/render_app.conf.dist b/render_app.conf.dist index a7c538308..d5675c618 100644 --- a/render_app.conf.dist +++ b/render_app.conf.dist @@ -6,6 +6,7 @@ webworkJWTsecret => 'private', SITE_HOST => 'http://localhost:3000', CORS_ORIGIN => '*', + STATIC_EXPIRES => 86400, STRICT_JWT => 0, hypnotoad => { listen => ['http://*:3000'],