module Roda::RodaPlugins::Caching::ResponseMethods
def cache_control(opts)
tools.ietf.org/html/rfc2616#section-14.9.1<br>See RFC 2616 / 14.9 for more on standard cache control directives:
# => Cache-Control: public, max-age=60
response.cache_control public: true, max_age: 60
Options can also contain value directives (:max_age, :s_maxage).
:no_store, :must_revalidate, :proxy_revalidate), with true as the value.
Options can can any non-value directives (:public, :private, :no_cache,
Specify response freshness policy for using the Cache-Control header.
def cache_control(opts) values = [] opts.each do |k, v| next unless v k = k.to_s.tr('_', '-') values << (v == true ? k : "#{k}=#{v}") end @headers[RodaResponseHeaders::CACHE_CONTROL] = values.join(', ') unless values.empty? end
def expires(max_age, opts=OPTS)
HTTP 1.0 clients (Cache-Control is an HTTP 1.1 header).
cached for. Also sets the Expires header, useful if you have
be an integer number of seconds that the current request should be
Set Cache-Control header with the max_age given. max_age should
def expires(max_age, opts=OPTS) cache_control(Hash[opts].merge!(:max_age=>max_age)) @headers[RodaResponseHeaders::EXPIRES] = (Time.now + max_age).httpdate end
def finish
Remove Content-Type and Content-Length for 304 responses.
def finish a = super if a[0] == 304 h = a[1] h.delete(RodaResponseHeaders::CONTENT_TYPE) h.delete(RodaResponseHeaders::CONTENT_LENGTH) end a end