webmcp
changeset 291:fa3a5bba0067
Cache control; Added documentation for request.add_header(...)
author | jbe |
---|---|
date | Sun Mar 22 17:03:01 2015 +0100 (2015-03-22) |
parents | 7c3aec7f1a7d |
children | c1b561ee56c1 |
files | framework/env/request/__init.lua framework/env/request/add_header.lua framework/env/request/allow_caching.lua framework/env/request/handler.lua framework/env/request/set_cache_time.lua |
line diff
1.1 --- a/framework/env/request/__init.lua Sun Mar 22 13:20:55 2015 +0100 1.2 +++ b/framework/env/request/__init.lua Sun Mar 22 17:03:01 2015 +0100 1.3 @@ -24,6 +24,9 @@ 1.4 request._force_absolute_baseurl = false 1.5 request._perm_params = {} 1.6 request._404_route = nil 1.7 + request._cache = false 1.8 + request._cache_manual = false 1.9 + request._cache_time = 3600 1.10 1.11 -- non-configurable 1.12 request._relative_baseurl = nil
2.1 --- a/framework/env/request/add_header.lua Sun Mar 22 13:20:55 2015 +0100 2.2 +++ b/framework/env/request/add_header.lua Sun Mar 22 17:03:01 2015 +0100 2.3 @@ -1,3 +1,13 @@ 2.4 +--[[-- 2.5 +request.add_header( 2.6 + key, -- name of header, e.g. "Date" 2.7 + value -- value, e.g. "Mon, 1 Jan 2001 01:00:00 GMT" 2.8 +) 2.9 + 2.10 +Adds a HTTP header to the response. 2.11 + 2.12 +--]]-- 2.13 + 2.14 function request.add_header(key, value) 2.15 if value == nil then 2.16 error("Function request.add_header(...) requires two arguments") 2.17 @@ -5,5 +15,9 @@ 2.18 request.configure(function() 2.19 local headers = request._response_headers 2.20 headers[#headers+1] = {key, value} 2.21 + local lower_key = string.lower(key) 2.22 + if lower_key == "cache-control" then 2.23 + request._cache_manual = true 2.24 + end 2.25 end) 2.26 end
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/framework/env/request/allow_caching.lua Sun Mar 22 17:03:01 2015 +0100 3.3 @@ -0,0 +1,12 @@ 3.4 +--[[-- 3.5 +request.allow_caching() 3.6 + 3.7 +Includes a "Cache-Control" header in the response that marks the content as cachable. 3.8 + 3.9 +--]]-- 3.10 + 3.11 +function request.allow_caching() 3.12 + request.configure(function() 3.13 + request._cache = true 3.14 + end) 3.15 +end
4.1 --- a/framework/env/request/handler.lua Sun Mar 22 13:20:55 2015 +0100 4.2 +++ b/framework/env/request/handler.lua Sun Mar 22 17:03:01 2015 +0100 4.3 @@ -248,6 +248,14 @@ 4.4 for i, header in ipairs(request._response_headers) do 4.5 http_request:send_header(header[1], header[2]) 4.6 end 4.7 + if not request._cache_manual then 4.8 + local cache_time = request._cache_time 4.9 + if request._cache and cache_time and cache_time > 0 then 4.10 + http_request:send_header("Cache-Control", "max-age=" .. cache_time) 4.11 + else 4.12 + http_request:send_header("Cache-Control", "no-cache") 4.13 + end 4.14 + end 4.15 http_request:send_header("Content-Type", slot.get_content_type()) 4.16 http_request:send_data(slot.render_layout()) 4.17 http_request:finish()
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 5.2 +++ b/framework/env/request/set_cache_time.lua Sun Mar 22 17:03:01 2015 +0100 5.3 @@ -0,0 +1,14 @@ 5.4 +--[[-- 5.5 +request.set_cache_time( 5.6 + seconds -- duration in seconds 5.7 +) 5.8 + 5.9 +Sets the expiration timeout for static content. 5.10 + 5.11 +--]]-- 5.12 + 5.13 +function request.set_cache_time(seconds) 5.14 + request.configure(function() 5.15 + request._cache_time = seconds 5.16 + end) 5.17 +end