Selecione as diretivas ou cole um cabeçalho existente. A análise verifica o texto, não o comportamento de um cache em uso.
Funciona localmente no seu navegadorO painel de cima monta uma política de resposta: escolha uma visibilidade, informe um prazo de validade em segundos, marque as diretivas necessárias e clique em Criar cabeçalho. O cabeçalho que a página enviaria aparece na caixa Cabeçalho de resposta com um resumo de três linhas — quantas diretivas existem, qual é a validade da resposta e quais caches podem guardá-la — seguido de cada conflito que a combinação contém. O painel de baixo faz o caminho inverso: cole um valor copiado de uma resposta, de uma configuração de CDN ou de um log, clique em Inspecionar cabeçalho e leia o mesmo resumo para esse texto. Os dois painéis rodam neste navegador e a página continua funcionando sem conexão.
Cache-Control é o campo de resposta HTTP que diz aos caches por quanto tempo uma resposta pode ser reutilizada e o que precisa ser verificado antes: max-age e s-maxage definem o prazo para navegadores e caches compartilhados, no-store proíbe armazenar, no-cache permite armazenar mas exige validação, e immutable, stale-while-revalidate e stale-if-error refinam tudo isso. Esta ferramenta lê o texto do cabeçalho conforme a RFC 9111 e mostra o que um cache faria com ele. Ela nunca acessa uma URL, então não pode dizer o que o seu servidor, o seu CDN ou o cache do navegador realmente fazem em produção.
public e private se contradizem: public marca a resposta como armazenável por caches compartilhados e private proíbe exatamente esses caches de guardá-la, então uma das duas precisa sair. no-store é a diretiva mais forte — nada pode ser armazenado —, o que torna max-age, s-maxage e as janelas de conteúdo vencido inúteis no mesmo cabeçalho; o resumo diz isso em vez de exibir um prazo que nunca será aplicado. s-maxage é lido apenas por caches compartilhados e private os exclui, então s-maxage ao lado de private não tem efeito.
immutable promete que o recurso não vai mudar enquanto estiver válido (RFC 8246); sem max-age ou s-maxage não há janela de validade para essa promessa cobrir. must-understand acompanha no-store, e um cache que entende os requisitos de cache daquele código de status ignora a parte no-store (RFC 9111, seção 5.2.2.3). A ausência de prazo também é avisada: sem max-age, s-maxage ou no-cache, um cache pode recorrer a uma heurística — normalmente um décimo do tempo desde o Last-Modified — e reutilizar a resposta sem consultar a origem.
max-age, s-maxage, stale-while-revalidate e stale-if-error usam delta-seconds, que a RFC 9111 define como um ou mais dígitos (seção 1.2.2): 0 é válido e significa vencido imediatamente, e o ponto decimal não faz parte da gramática. Um valor entre aspas como max-age="5" é avisado porque quem envia deve usar a forma de token (seção 5.2.2.1). Valores acima de 2147483647 segundos também são sinalizados: um cache que não consegue representar esse número deve lê-lo como 2147483648 segundos, mais de 68 anos, o que na prática significa nunca vencido.
A outra forma de argumento neste campo é a lista de nomes de campo entre aspas de no-cache e private, como no-cache="Set-Cookie". As vírgulas dentro dessas aspas pertencem à lista, por isso o analisador divide o campo pelas vírgulas fora das aspas e conta esse valor como uma única diretiva. Diretivas que um cache não reconhece são ignoradas por ele (seção 5.2.3), e é justamente por isso que um erro de digitação como maz-age=60 merece aviso: a resposta continuaria sendo servida e a regra simplesmente não existiria.
A página nunca envia uma requisição: ela apenas lê o texto do cabeçalho. Se um CDN, um proxy reverso ou um navegador respeitam o campo depende da configuração desse sistema e do código de status da resposta, e um cache pode armazenar uma resposta sem nenhuma diretiva se a considerar cacheável por heurística. Confira a política na resposta real — curl -I, os cabeçalhos de cache que o seu CDN informa ou o painel de rede do navegador — antes de confiar nela.
Dois vizinhos deste campo ficam de fora de propósito: Expires dá uma data absoluta em vez de um prazo, e Pragma é um campo de requisição do HTTP/1.0 que a RFC 9111 torna obsoleto (seção 5.4). Por isso uma linha que começa com outro nome de campo é recusada em vez de renomeada como Cache-Control. E como a verificação é textual, um cabeçalho impecável ainda pode estar errado para o conteúdo por trás dele: no-store em um arquivo estático ou um max-age de um ano em uma página que muda de hora em hora são decisões que nenhum analisador pode tomar por você.