# HG changeset patch # User jbe # Date 1427040181 -3600 # Node ID fa3a5bba0067de34a0dd12c96c4d547b5b68fd17 # Parent 7c3aec7f1a7dfb59639b0060e066d68b193cabc3 Cache control; Added documentation for request.add_header(...) diff -r 7c3aec7f1a7d -r fa3a5bba0067 framework/env/request/__init.lua --- a/framework/env/request/__init.lua Sun Mar 22 13:20:55 2015 +0100 +++ b/framework/env/request/__init.lua Sun Mar 22 17:03:01 2015 +0100 @@ -24,6 +24,9 @@ request._force_absolute_baseurl = false request._perm_params = {} request._404_route = nil + request._cache = false + request._cache_manual = false + request._cache_time = 3600 -- non-configurable request._relative_baseurl = nil diff -r 7c3aec7f1a7d -r fa3a5bba0067 framework/env/request/add_header.lua --- a/framework/env/request/add_header.lua Sun Mar 22 13:20:55 2015 +0100 +++ b/framework/env/request/add_header.lua Sun Mar 22 17:03:01 2015 +0100 @@ -1,3 +1,13 @@ +--[[-- +request.add_header( + key, -- name of header, e.g. "Date" + value -- value, e.g. "Mon, 1 Jan 2001 01:00:00 GMT" +) + +Adds a HTTP header to the response. + +--]]-- + function request.add_header(key, value) if value == nil then error("Function request.add_header(...) requires two arguments") @@ -5,5 +15,9 @@ request.configure(function() local headers = request._response_headers headers[#headers+1] = {key, value} + local lower_key = string.lower(key) + if lower_key == "cache-control" then + request._cache_manual = true + end end) end diff -r 7c3aec7f1a7d -r fa3a5bba0067 framework/env/request/allow_caching.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/framework/env/request/allow_caching.lua Sun Mar 22 17:03:01 2015 +0100 @@ -0,0 +1,12 @@ +--[[-- +request.allow_caching() + +Includes a "Cache-Control" header in the response that marks the content as cachable. + +--]]-- + +function request.allow_caching() + request.configure(function() + request._cache = true + end) +end diff -r 7c3aec7f1a7d -r fa3a5bba0067 framework/env/request/handler.lua --- a/framework/env/request/handler.lua Sun Mar 22 13:20:55 2015 +0100 +++ b/framework/env/request/handler.lua Sun Mar 22 17:03:01 2015 +0100 @@ -248,6 +248,14 @@ for i, header in ipairs(request._response_headers) do http_request:send_header(header[1], header[2]) end + if not request._cache_manual then + local cache_time = request._cache_time + if request._cache and cache_time and cache_time > 0 then + http_request:send_header("Cache-Control", "max-age=" .. cache_time) + else + http_request:send_header("Cache-Control", "no-cache") + end + end http_request:send_header("Content-Type", slot.get_content_type()) http_request:send_data(slot.render_layout()) http_request:finish() diff -r 7c3aec7f1a7d -r fa3a5bba0067 framework/env/request/set_cache_time.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/framework/env/request/set_cache_time.lua Sun Mar 22 17:03:01 2015 +0100 @@ -0,0 +1,14 @@ +--[[-- +request.set_cache_time( + seconds -- duration in seconds +) + +Sets the expiration timeout for static content. + +--]]-- + +function request.set_cache_time(seconds) + request.configure(function() + request._cache_time = seconds + end) +end