← Cloudflare Cache / cache / how-to
Cache podle stavového kódu
Zákazníci mohou nastavit dobu platnosti (TTL) mezipaměti podle stavu odpovědi z origin serveru. TTL mezipaměti udává, jak dlouho prostředek zůstává v síti Cloudflare, než je označen jako STALE nebo z cache vyřazen. Stavové kódy vrací origin server daného zdroje.
Nastavení TTL mezipaměti na základě stavu odpovědi má přednost před výchozí chování cache (standardní cachování) pro statické soubory a přebíjí pokyny k ukládání do mezipaměti odesílané origin webovým serverem. Chcete-li nestatický obsah ukládat do mezipaměti, nastavte Cache Level pro Cache Everything pomocí Cache Rule. Nastavení no-store Cache-Control nebo nízkým TTL (pomocí max-age/s-maxage) zvyšuje počet požadavků na webové servery originu a snižuje výkon.
Limity ukládání do mezipaměti
Maximální limit pro cachování je u tarifů Free, Pro a Business 512 MB na soubor, u tarifu Enterprise pak 5 GB na soubor. Pokud potřebujete tyto limity navýšit, obraťte se na svého Customer Success Managera.
Edge TTL
By default, Cloudflare caches certain HTTP response codes with the following Edge Cache TTL when a cache-control direktiva nebo expires hlavičky odpovědi nejsou přítomné.
| Stavový kód HTTP | Default TTL |
|---|---|
| 200, 206, 301 | 120m |
| 302, 303 | 20m |
| 404, 410 | 3m |
Všechny ostatní stavové kódy se ve výchozím nastavení do mezipaměti neukládají.
Nastavení TTL mezipaměti podle stavového kódu odpovědi v dashboardu Cloudflare
Chcete-li nastavit TTL mezipaměti podle stavu odpovědi, vytvořit Cache Rule pro Cache TTL podle stavového kódu.
Nastavení TTL mezipaměti podle stavového kódu odpovědi přes Cloudflare API
curl --request PUT \
"https://api.cloudflare.com/client/v4/zones/{zone_id}/rulesets/{ruleset_id}" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"rules": [
{
"expression": "(http.host eq \"www.example.com\")",
"description": "set cache TTL by response status",
"action": "set_cache_settings",
"action_parameters": {
"cache": true,
"edge_ttl": {
"status_code_ttl": [
{
"status_code_range": {
"to": 299
},
"value": 86400
},
{
"status_code_range": {
"from": 300,
"to": 499
},
"value": 0 // no-cache
},
{
"status_code_range": {
"from": 500
},
"value": -1 // no-store
}
],
"mode": "respect_origin"
}
}
}
]
}'Syntaxe
Zadejte JSON objekt obsahující stavové kódy a jim odpovídající TTL. Každý pár klíč-hodnota v pravidlu cache TTL by status má následující syntaxi:
status_code: Celočíselná hodnota, například 200 nebo 500.status_codeodpovídá přesnému stavovému kódu z origin webového serveru. Platné stavové kódy jsou v rozsahu 100-999.status_code_range: Celočíselné hodnoty profromato.status_code_rangeodpovídá jakémukoli stavovému kódu z origin webového serveru v zadaném rozsahu.value: Celočíselná hodnota určující dobu platnosti prostředku v sekundách, nebo jeden z následujících řetězců:no-store(odpovídá-1),no-cache(odpovídá0).
Nastavení TTL mezipaměti podle stavového kódu odpovědi pomocí Cloudflare Worker
cacheTtlByStatus možnost je verzí cacheTtl funkce, která přiřadí cache TTL podle stavového kódu odpovědi na požadavek (například { "200-299": 86400, 404: 1, "500-599": 0 }).
Zpracování TTL pro stavové kódy 304 a 200
-
Pokud pro stavový kód není TTL výslovně nastaveno
304, automaticky ji nastavíme tak, aby odpovídala TTL stavového kódu200(pokud jej uživatel definoval pro200). -
Pokud uživatel výslovně nastaví jiné TTL pro
304než pro200, dojde k následujícímu chování:
- Když je
200odpověď je přijata, objekt se cachuje s TTL nastaveným pro stavový kód200. - Jakmile prostředku vyprší platnost a my ho znovu ověříme u origin serveru, pokud origin vrátí
304, TTL cache se aktualizuje na hodnotu nastavenou pro304.
Pokud například uživatel nastaví TTL na jednu hodinu pro stav 200 a 0 sekund (uložit do mezipaměti a vždy znovu ověřit) pro stavový kód 304, prostředek se uloží do cache na 1 hodinu. Po vypršení platnosti provedeme revalidaci s origin serverem. Pokud origin server vrátí 304, každý další požadavek vyvolá revalidaci. Pokud origin server nadále vrací 304, tento cyklus bude pokračovat.
Toto chování je nežádoucí, pokud uživatel nemá konkrétní specifický případ použití. Uživatelé by proto měli zajistit, aby TTL pro 304 odpovídá TTL pro 200 pokud to záměrně nevyžadují.