Cache-Control and Expires header function
This commit is contained in:
parent
d9ebdfca13
commit
881fab7ff0
@ -44,6 +44,7 @@ module Yesod.Content
|
||||
, RepXml (..)
|
||||
-- * Utilities
|
||||
, formatW3
|
||||
, formatRFC1123
|
||||
#if TEST
|
||||
, testSuite
|
||||
#endif
|
||||
@ -252,3 +253,7 @@ caseTypeByExt = do
|
||||
-- | Format a 'UTCTime' in W3 format; useful for setting cookies.
|
||||
formatW3 :: UTCTime -> String
|
||||
formatW3 = formatTime defaultTimeLocale "%FT%X-00:00"
|
||||
|
||||
-- | Format as per RFC 1123.
|
||||
formatRFC1123 :: UTCTime -> String
|
||||
formatRFC1123 = formatTime defaultTimeLocale "%a, %d %b %Y %X %Z"
|
||||
|
||||
@ -51,6 +51,11 @@ module Yesod.Handler
|
||||
, deleteCookie
|
||||
, setHeader
|
||||
, setLanguage
|
||||
-- ** Content caching and expiration
|
||||
, cacheSeconds
|
||||
, neverExpires
|
||||
, alreadyExpired
|
||||
, expiresAt
|
||||
-- * Session
|
||||
, setSession
|
||||
, deleteSession
|
||||
@ -75,6 +80,7 @@ import Yesod.Content
|
||||
import Yesod.Internal
|
||||
import Data.List (foldl')
|
||||
import Data.Neither
|
||||
import Data.Time (UTCTime)
|
||||
|
||||
import Control.Exception hiding (Handler, catch)
|
||||
import qualified Control.Exception as E
|
||||
@ -383,10 +389,33 @@ deleteCookie = addHeader . DeleteCookie
|
||||
setLanguage :: String -> GHandler sub master ()
|
||||
setLanguage = setSession langKey
|
||||
|
||||
-- | Set an arbitrary header on the client.
|
||||
-- | Set an arbitrary response header.
|
||||
setHeader :: String -> String -> GHandler sub master ()
|
||||
setHeader a = addHeader . Header a
|
||||
|
||||
-- | Set the Cache-Control header to indicate this response should be cached
|
||||
-- for the given number of seconds.
|
||||
cacheSeconds :: Int -> GHandler s m ()
|
||||
cacheSeconds i = setHeader "Cache-Control" $ concat
|
||||
[ "max-age="
|
||||
, show i
|
||||
, ", public"
|
||||
]
|
||||
|
||||
-- | Set the Expires header to some date in 2037. In other words, this content
|
||||
-- is never (realistically) expired.
|
||||
neverExpires :: GHandler s m ()
|
||||
neverExpires = setHeader "Expires" "Thu, 31 Dec 2037 23:55:55 GMT"
|
||||
|
||||
-- | Set an Expires header in the past, meaning this content should not be
|
||||
-- cached.
|
||||
alreadyExpired :: GHandler s m ()
|
||||
alreadyExpired = setHeader "Expires" "Thu, 01 Jan 1970 05:05:05 GMT"
|
||||
|
||||
-- | Set an Expires header to the given date.
|
||||
expiresAt :: UTCTime -> GHandler s m ()
|
||||
expiresAt = setHeader "Expires" . formatRFC1123
|
||||
|
||||
-- | Set a variable in the user's session.
|
||||
--
|
||||
-- The session is handled by the clientsession package: it sets an encrypted
|
||||
|
||||
Loading…
Reference in New Issue
Block a user