Safe Haskell | None |
---|---|
Language | Haskell2010 |
Helpers for running a Snap
web handler with compression.
- withCompression :: MonadSnap m => m a -> m ()
- withCompression' :: MonadSnap m => Set ByteString -> m a -> m ()
- noCompression :: MonadSnap m => m ()
- data BadAcceptEncodingException
Documentation
:: MonadSnap m | |
=> m a | the web handler to run |
-> m () |
Runs a Snap
web handler with compression if available.
If the client has indicated support for gzip
or deflate
in its
Accept-Encoding
header, and the Content-Type
in the response is one of
the following types:
application/x-javascript
application/json
text/css
text/html
text/javascript
text/plain
text/xml
application/x-font-truetype
Then the given handler's output stream will be compressed,
Content-Encoding
will be set in the output headers, and the
Content-Length
will be cleared if it was set. (We can't process the
stream in O(1) space if the length is known beforehand.)
The wrapped handler will be run to completion, and then the Response
that's contained within the Snap
monad state will be passed to
finishWith
to prevent further processing.
Example:
ghci> :set -XOverloadedStrings ghci> import qualified Data.Map as M ghci> import qualified Snap.Test as T ghci> let r = T.get "/" M.empty >> T.addHeader "Accept-Encoding" "gzip,deflate" ghci> let h =modifyResponse
(setContentType
"text/plain") >>writeBS
"some text" ghci> T.runHandler r h HTTP/1.1 200 OK content-type: text/plain server: Snap/test date: Fri, 08 Aug 2014 15:40:45 GMT some text ghci> T.runHandler r (withCompression
h) HTTP/1.1 200 OK content-type: text/plain vary: Accept-Encoding content-encoding: gzip server: Snap/test date: Fri, 08 Aug 2014 15:40:10 GMT
:: MonadSnap m | |
=> Set ByteString | set of compressible MIME types |
-> m a | the web handler to run |
-> m () |
The same as withCompression
, with control over which MIME types to
compress.
noCompression :: MonadSnap m => m () Source #
Turn off compression by setting "Content-Encoding: identity" in the
response headers. withCompression
is a no-op when a content-encoding is
already set.
data BadAcceptEncodingException Source #
Thrown when the 'Accept-Encoding' request header has invalid format.