Setting Default HTTP Cache Headers in Rails
We’re working on putting our current product behind Amazon Cloudfront. With Cloudfront, if you don’t set a Cache-Control header with an expiry time, Cloudfront will cache the content for 24 hours by default. Instead of littering all my controller actions with cache settings, I wanted to add a default value then be able to override on and action by action basis.
First, here’s how you actually set a cache-control header. This would go in a controller action.
expires_in 1.minute, :public => true
To add a default setting, add the expires_in call to a before_filter in your application controller.
class ApplicationController < ActionController::Base protect_from_forgery before_filter :set_default_cache_headers def set_default_cache_headers expires_in 1.minute, :public => true end end
Finally, override the cache header as needed in your controller actions.
class HomeController < ApplicationController def index # ... action logic expires_in 5.minute, :public => true end end