How to setup static assets caching with apache?

krajicek picture krajicek · Jun 4, 2015 · Viewed 12.5k times · Source

I'd like to optimize caching of static assets (.js, .css, ... files) used in our web. My goal is based on this article (https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching#invalidating-and-updating-cached-responses).

In short - because these static assets tend to be updated ad-hoc (sometimes weekly, sometimes twice a day, ...) I'd like to cache them with far future expiration and give them unique names based on the content or modification date or similar. This should allow to have them cached for a long time but have them updated as soon as some change occurs.

Is this technique supported by Apache2 server? Or is there some middle ware system which handles fingerprints generating (to have unique asset names) and updating references to them in HTML file (which won't be cached at all)?

We use LAMP stack on our host.

Thank you in advance

Answer

sitilge picture sitilge · Jun 5, 2015

You can enable mod_mime, mod_expires for Apache and use the following snippet

<FilesMatch "\.(png|jp?g|gif|ico|mp4|wmv|mov|mpeg|css|map|woff?|eot|svg|ttf|js|json|pdf|csv)">
    ExpiresActive on
    ExpiresDefault "access plus 2 weeks"
</FilesMatch>

Or set the respective php headers

session_cache_limiter('none');
header('Cache-control: max-age='.(60*60*24*7)); //one week
header('Expires: '.gmdate(DATE_RFC1123,time()+60*60*24*365)); //one week

Also related article here: How to get the browser to cache images, with php?