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

Impressum / About Us