http3-0.0.7: Network/QPACK/Table/Static.hs
{-# LANGUAGE OverloadedStrings #-}
module Network.QPACK.Table.Static (
toStaticEntry,
staticTableSize,
staticTableList,
) where
import Data.Array (Array, listArray)
import Data.Array.Base (unsafeAt)
import Network.HPACK.Internal
import qualified UnliftIO.Exception as E
import Network.QPACK.Error
import Network.QPACK.Types
----------------------------------------------------------------
-- | The size of static table.
staticTableSize :: Size
staticTableSize = length staticTableList
{-# INLINE toStaticEntry #-}
-- | Get 'Entry' from the static table.
--
-- >>> toStaticEntry 1
-- Entry 38 (Token {tokenIx = 2, shouldBeIndexed = False, isPseudo = True, tokenKey = ":path"}) "/"
-- >>> toStaticEntry 8
-- Entry 49 (Token {tokenIx = 30, shouldBeIndexed = True, isPseudo = False, tokenKey = "If-Modified-Since"}) ""
-- >>> toStaticEntry 50
-- Entry 53 (Token {tokenIx = 21, shouldBeIndexed = True, isPseudo = False, tokenKey = "Content-Type"}) "image/png"
toStaticEntry :: AbsoluteIndex -> Entry
toStaticEntry (AbsoluteIndex sidx)
| sidx < staticTableSize = staticTable `unsafeAt` sidx
| otherwise = E.impureThrow IllegalStaticIndex
-- | Pre-defined static table.
staticTable :: Array Index Entry
staticTable = listArray (1, staticTableSize) $ map toEntry staticTableList
----------------------------------------------------------------
staticTableList :: [Header]
staticTableList =
[ (":authority", "")
, (":path", "/")
, ("age", "0")
, ("content-disposition", "")
, ("content-length", "0")
, ("cookie", "")
, ("date", "")
, ("etag", "")
, ("if-modified-since", "")
, ("if-none-match", "")
, ("last-modified", "")
, ("link", "")
, ("location", "")
, ("referer", "")
, ("set-cookie", "")
, (":method", "CONNECT")
, (":method", "DELETE")
, (":method", "GET")
, (":method", "HEAD")
, (":method", "OPTIONS")
, (":method", "POST")
, (":method", "PUT")
, (":scheme", "http")
, (":scheme", "https")
, (":status", "103")
, (":status", "200")
, (":status", "304")
, (":status", "404")
, (":status", "503")
, ("accept", "*/*")
, ("accept", "application/dns-message")
, ("accept-encoding", "gzip, deflate, br")
, ("accept-ranges", "bytes")
, ("access-control-allow-headers", "cache-control")
, ("access-control-allow-headers", "content-type")
, ("access-control-allow-origin", "*")
, ("cache-control", "max-age=0")
, ("cache-control", "max-age=2592000")
, ("cache-control", "max-age=604800")
, ("cache-control", "no-cache")
, ("cache-control", "no-store")
, ("cache-control", "public, age=31536000")
, ("content-encoding", "br")
, ("content-encoding", "gzip")
, ("content-type", "application/dns-message")
, ("content-type", "application/javascript")
, ("content-type", "application/json")
, ("content-type", "application/x-www-form-urlencoded")
, ("content-type", "image/gif")
, ("content-type", "image/jpeg")
, ("content-type", "image/png")
, ("content-type", "text/css")
, ("content-type", "text/html; charset=utf-8")
, ("content-type", "text/plain")
, ("content-type", "text/plain;charset=utf-8")
, ("range", "bytes=0-")
, ("strict-transport-security", "max-age=31536000")
, ("strict-transport-security", "max-age=31536000; includesubdomains")
, ("strict-transport-security", "max-age=31536000; includesubdomains; preload")
, ("vary", "accept-encoding")
, ("vary", "origin")
, ("x-content-type-options", "nosniff")
, ("x-xss-protection", "1; mode=block")
, (":status", "100")
, (":status", "204")
, (":status", "206")
, (":status", "302")
, (":status", "400")
, (":status", "403")
, (":status", "421")
, (":status", "425")
, (":status", "500")
, ("accept-language", "")
, ("access-control-allow-credentials", "FALSE")
, ("access-control-allow-credentials", "TRUE")
, ("access-control-allow-headers", "*")
, ("access-control-allow-methods", "get")
, ("access-control-allow-methods", "get, post, options")
, ("access-control-allow-methods", "options")
, ("access-control-expose-headers", "content-length")
, ("access-control-request-headers", "content-type")
, ("access-control-request-method", "get")
, ("access-control-request-method", "post")
, ("alt-svc", "clear")
, ("authorization", "")
,
( "content-security-policy"
, "script-src 'none'; object-src 'none'; base-uri 'none'"
)
, ("early-data", "1")
, ("expect-ct", "")
, ("forwarded", "")
, ("if-range", "")
, ("origin", "")
, ("purpose", "prefetch")
, ("server", "")
, ("timing-allow-origin", "*")
, ("upgrade-insecure-requests", "1")
, ("user-agent", "")
, ("x-forwarded-for", "")
, ("x-frame-options", "deny")
, ("x-frame-options", "sameorigin")
]