# Cache keys

Uma cache key é a entrada de índice sob a qual o [Cache](/pt-br/documentacao/plataforma/applications/#cache) armazena um objeto. A Azion a monta a partir da requisição: o scheme, o host, o path e as variações que um cache setting acrescenta. Uma requisição cuja key casa com um objeto armazenado é respondida pela cópia. Caso contrário, a requisição vai à origem, e a Azion armazena a resposta sob essa key. Para o processo de busca, consulte [Expiração e atualização](/pt-br/documentacao/plataforma/applications/cache/expiracao-e-atualizacao/); para os campos que acrescentam variações, consulte [Cache settings](/pt-br/documentacao/plataforma/applications/cache/cache-settings/).

---

## Formato da key

A key padrão concatena quatro elementos da URI da requisição, nesta ordem:

| Elemento                          | Exemplo              |
| --------------------------------- | -------------------- |
| Scheme                            | `https`              |
| Host                              | `static.example.com` |
| Path                              | `/page/site.js`      |
| Separador de variação e variações | `@@Mobile`           |

A query string não faz parte da key padrão: `https://static.example.com/page/site.js?city=city&name=name` gera a mesma key que a URI sem ela. A variação por query string, em Variações, a acrescenta.

A URI `https://static.example.com/page/site.js` gera a key `httpsstatic.example.com/page/site.js`. As keys diferenciam maiúsculas de minúsculas: caracteres maiúsculos e minúsculos são distintos. Quando um cache setting ativa uma variação, a key pode terminar com o separador `@@`, como em `httpsstatic.example.com/page/site.js@@`. Cada variação listada em Variações é acrescentada depois desse separador.

---

## Variações

Uma variação é acrescentada à key padrão, de modo que uma URI pode manter mais de um objeto no cache. A tabela lista o que cada variação acrescenta e a key que ela gera.

| Variação                                                                        | O que é acrescentado                                                                                                                                                                                                                | Exemplo de key                                                                                                                                |
| ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| Requisição complexa                                                             | O método da requisição, como prefixo da key. Uma requisição `GET` ou `HEAD` não recebe prefixo.                                                                                                                                     | `optionshttpsstatic.example.com/page`                                                                                                         |
| Query string                                                                    | O separador `?` e os argumentos que o cache setting nomeia, na ordem em que a requisição os envia. Com **Sort** ativo, `?name=name&city=city` e `?city=city&name=name` compartilham uma key, com os argumentos em ordem alfabética. | `httpstatic.example.com/page?name=name`, `httpstatic.example.com/page?city=city&name=name`, `httpstatic.example.com/page?name=name&city=city` |
| Cookies                                                                         | `@@` e, em seguida, cada nome e valor de cookie que o cache setting nomeia, seguidos de `;`. A variação vazia, sem valor de cookie, é `@@;`.                                                                                        | `httpwww.example.com/@@;`, `httpwww.example.com/@@user=user;`                                                                                 |
| Device group                                                                    | `@@` e o nome do device group.                                                                                                                                                                                                      | `httpwww.example.com/@@Mobile`                                                                                                                |
| [Image Processor](/pt-br/documentacao/plataforma/applications/#image-processor) | A query string `ims` e o formato de imagem convertido depois de `@@`.                                                                                                                                                               | `httpsstatic.example.com/static/images/image_1.jpg?ims=880x@@webp`                                                                            |
| Large File Optimization                                                         | `@@bytes=<início>-<fim>` para cada fragmento, de modo que cada fragmento tem sua própria key. Um arquivo de 2.097.151 bytes gera duas keys.                                                                                         | `httpsstatic.example.com/media/file.mp4@@bytes=0-1048575`, `httpsstatic.example.com/media/file.mp4@@bytes=1048576-2097151`                    |
| `POST` ou `OPTIONS` em cache                                                    | `@@` e o hash MD5 do corpo da requisição.                                                                                                                                                                                           | `httpsdynamic.example.com/path@@md5_of_post_arguments`, `httpsdynamic.example.com/path@@md5_of_options_arguments`                             |

Os campos de query string e de cookie diferenciam maiúsculas de minúsculas, então `user` e `User` são duas variações. Para uma requisição `POST` ou `OPTIONS` em cache, o corpo da requisição faz parte da key. As variações por query string, por cookie, por device group e por método da requisição são o recurso chamado Advanced Cache Key. Para saber o que cada behavior faz com a key, consulte [Configurações do Application Accelerator](/pt-br/documentacao/plataforma/applications/application-accelerator/configuracoes/#cache-variation).

Estes controles geram as variações:

- **Cache vary by Method** coloca em cache requisições `POST` e `OPTIONS`.
- **Cache vary by Query String**, com seu **Behavior** e seu **Sort**, define a variação por query string.
- **Cache vary by Cookies** define a variação por cookie.
- **Cache vary by Devices** define a variação por device group, para os grupos definidos em [Device Groups](/pt-br/documentacao/plataforma/applications/device-groups/).
- **Large file optimization** divide o objeto em fragmentos, cada um com sua própria key.
- O Image Processor acrescenta a variação de formato.

Para o campo por trás de cada controle, consulte [Cache settings](/pt-br/documentacao/plataforma/applications/cache/cache-settings/).

---

## Headers de debug

Para ler o status e a key de uma resposta, envie a requisição com o header `Pragma: azion-debug-cache`. A resposta carrega dois headers. O `x-cache` carrega o status de cache, o endereço IP do servidor que respondeu a requisição e o protocolo. O `x-cache-key` carrega a key:

```http
x-cache: MISS from 192.0.2.10 with HTTP/2.0
x-cache-key: httpsstatic.example.com/page/site.js
```

Em HTTP/2, os nomes dos headers chegam em minúsculas. Uma resposta que a plataforma não coloca em cache carrega `-` nos dois headers. Requisições seguidas para um path podem ser respondidas, cada uma, por um servidor diferente, que o `x-cache` nomeia. Para o procedimento, consulte [Verifique o status de cache de uma resposta](/pt-br/documentacao/guias/performance-e-confiabilidade/cache-e-purge/verificar-tempo-de-cache-da-pagina/).

---

## Status de cache

O header `x-cache` começa com um de oito valores. Cada um nomeia o que o Cache fez com a requisição.

| Status        | Significado                                                                                                                                                                                                                                        |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `HIT`         | Conteúdo válido e atualizado entregue pelo cache do data center mais próximo do usuário. A origem não é acessada.                                                                                                                                  |
| `MISS`        | O conteúdo não está no cache. A Azion o busca na origem, e a resposta pode ser armazenada para requisições seguintes.                                                                                                                              |
| `EXPIRED`     | A cópia em cache passou do seu TTL. Quando a origem responde, a resposta atualiza a cópia para as requisições seguintes.                                                                                                                           |
| `STALE`       | O stale cache está ativo, a cópia expirou e a origem não respondeu, então a Azion entrega a cópia expirada. Para mais informações, consulte [Expiração e atualização](/pt-br/documentacao/plataforma/applications/cache/expiracao-e-atualizacao/). |
| `UPDATING`    | A cópia expirou, e a Azion a entrega enquanto o conteúdo é atualizado a partir da origem. Para mais informações, consulte [Expiração e atualização](/pt-br/documentacao/plataforma/applications/cache/expiracao-e-atualizacao/).                   |
| `REVALIDATED` | A Azion verificou a cópia junto à origem com headers condicionais, e ela ainda estava atual, então a origem não a enviou novamente.                                                                                                                |
| `BYPASS`      | A requisição foi à origem porque um behavior [Bypass Cache](/pt-br/documentacao/plataforma/applications/rules-engine/#bypass-cache) se aplica.                                                                                                     |
| `-`           | Sem status: o conteúdo está restrito de cache. Por exemplo, uma requisição `POST` quando o cache para `POST` está desativado. Uma resposta `GET` ou `HEAD` que uma função constrói também pode trazê-lo.                                           |

---

## Recursos relacionados

- [Expiração e atualização](/pt-br/documentacao/plataforma/applications/cache/expiracao-e-atualizacao.md): Como uma requisição é comparada a um objeto armazenado, e o que o TTL e o stale cache fazem com a cópia.
- [Verifique o status de cache de uma resposta](/pt-br/documentacao/guias/performance-e-confiabilidade/cache-e-purge/verificar-tempo-de-cache-da-pagina.md): A requisição que retorna os headers de debug, e como lê-los.
- [Real-Time Purge](/pt-br/documentacao/plataforma/applications/cache/real-time-purge.md): Um purge por cache key recebe as keys desta página, uma por variação.
- [Como o Image Processor funciona](/pt-br/documentacao/plataforma/applications/image-processor/entrega-de-imagens.md): Como uma imagem derivada é armazenada sob a sua própria key.
