Ir para o console

Gerenciar o comportamento do cache

O Firebase Hosting usa uma rede global de fornecimento de conteúdo (CDN) avançada para tornar seu site o mais rápido possível.

Qualquer conteúdo estático solicitado é automaticamente armazenado em cache no CDN. Se você implantar novamente o conteúdo do site, o Firebase Hosting limpará automaticamente todo conteúdo estático em cache no CDN até a próxima solicitação.

No entanto, como os serviços Cloud Functions e Cloud Run geram conteúdo dinamicamente, o conteúdo de um determinado URL pode variar com base em itens como entrada ou identidade do usuário. Para compensar isso, as solicitações tratadas pelo código de back-end não fazem cache no CDN, por padrão.

É possível, no entanto, configurar o comportamento de cache para conteúdo dinâmico. Por exemplo, se uma função gerar um novo conteúdo apenas periodicamente, é possível acelerar o aplicativo, basta armazenar em cache o conteúdo gerado por um curto período de tempo, no mínimo.

É possível também reduzir potencialmente os custos de execução das funções, porque o conteúdo é fornecido pelo CDN e não por uma função acionada. Saiba mais sobre como otimizar a execução de funções e serviços na documentação do Cloud Functions e do Cloud Run.

Saiba mais sobre o comportamento de armazenamento em cache na documentação do desenvolvedor da Web do Google.

Definir o controle de cache

A principal ferramenta usada para gerenciar o cache para conteúdo dinâmico é o cabeçalho Cache-Control. Ao configurar esse cabeçalho, é possível se comunicar com o navegador e com o CDN por quanto tempo seu conteúdo poder ser armazenado em cache. Na sua função, configure Cache-Control desta maneira:

res.set('Cache-Control', 'public, max-age=300, s-maxage=600');

Neste cabeçalho de exemplo, as diretivas fazem três coisas:

  • public - Marca o cache como public. Isso significa que o navegador e os servidores intermediários, ou seja, o CDN para Firebase Hosting, podem armazenar em cache o conteúdo.

  • max-age - Informa ao navegador e ao CDN quantos segundos eles podem armazenar em cache o conteúdo. Quando o tempo definido expirar, o navegador e o CDN devem revalidar o conteúdo com o servidor de origem. No cabeçalho do exemplo, permitimos que o navegador e o CDN armazenem em cache o conteúdo por cinco minutos. Consulte s-maxage abaixo para receber controles específicos para o armazenamento em cache do CDN.

  • s-maxage - Substitui a diretiva max-age somente para o cache CDN e informa ao CDN quantos segundos ele armazena em cache o conteúdo. Quando o tempo definido expirar, o CDN deve revalidar o conteúdo com o servidor de origem. No cabeçalho do exemplo, substituímos a configuração de max-age para o CDN. Isso permite ao CDN armazenar em cache o conteúdo por dez minutos.

Para max-age e s-maxage, defina os valores para o maior período de tempo que seja confortável com os usuários que recebem conteúdo obsoleto. Se uma página mudar a cada poucos segundos, use um valor de tempo menor. No entanto, outros tipos de conteúdo podem ser armazenados em cache por horas, dias ou até mesmo meses.

Saiba mais sobre o cabeçalho Cache-Control na Mozilla Developer Network (em inglês) e na documentação do desenvolvedor da Web do Google.

Quando o conteúdo em cache é entregue?

O navegador e o CDN armazenam em cache seu conteúdo com base nos seguintes itens:

  • Nome do host
  • no caminho;
  • String de consulta
  • Conteúdo dos cabeçalhos da solicitação especificados no cabeçalho Vary

Cabeçalhos Vary

O cabeçalho Vary determina quais cabeçalhos de solicitação devem ser usados para fornecer uma resposta apropriada, se o conteúdo em cache é válido ou se o conteúdo deve ser revalidado com o servidor de origem.

Muitas vezes, não é necessário se preocupar com o cabeçalho Vary. O Firebase Hosting configura automaticamente um cabeçalho Vary apropriado em sua resposta para situações comuns. Isso inclui se certificar de que qualquer cookie de sessão ou cabeçalho de autorização que você esteja usando faça parte da chave de cache, evitando vazamentos acidentais de conteúdo.

Em alguns casos de uso avançado, talvez você precise de outros cabeçalhos para afetar o cache. Quando esse for o caso, você poderá simplesmente configurar o cabeçalho Vary na sua resposta:

res.set('Vary', 'Accept-Encoding, X-My-Custom-Header');

Assim, duas solicitações idênticas com diferentes cabeçalhos X-My-Custom-Header seriam armazenadas em cache separadamente.

Como usar cookies

Ao usar o Firebase Hosting com o Cloud Functions, os cookies geralmente são removidos das solicitações recebidas. Isso é necessário para que o comportamento de cache da CDN seja eficiente. Somente o cookie __session tem permissão para passar para a execução do seu aplicativo.

Quando presente, o cookie __session faz parte da chave do cache automaticamente, o que significa que é impossível para dois usuários com cookies diferentes receber a resposta em cache do outro. Use o cookie __session somente se o aplicativo exibir conteúdo diferente, dependendo da autorização do usuário.