Administrar el comportamiento de la caché

Firebase Hosting utiliza una potente CDN global para que su sitio sea lo más rápido posible.

Cualquier contenido estático solicitado se almacena automáticamente en caché en la CDN . Si vuelves a implementar el contenido de tu sitio, Firebase Hosting borra automáticamente todo el contenido almacenado en caché en la CDN hasta la siguiente solicitud.

Sin embargo, debido a que los servicios Cloud Functions y Cloud Run generan contenido dinámicamente, el contenido de una URL determinada puede variar en función de elementos como la entrada del usuario o la identidad del usuario. Para tener en cuenta esto, las solicitudes manejadas por el código de backend no se almacenan en caché en la CDN de forma predeterminada.

Sin embargo, puedes configurar el comportamiento del almacenamiento en caché para contenido dinámico . Por ejemplo, si una función genera contenido nuevo solo periódicamente, puede acelerar su aplicación almacenando en caché el contenido generado durante al menos un corto período de tiempo.

De manera similar, puede configurar el comportamiento del almacenamiento en caché para reducir potencialmente los costos de ejecución de funciones porque el contenido se entrega desde la CDN en lugar de desde una función activada. Lea más sobre cómo optimizar la ejecución de funciones y los servicios en la documentación de Cloud Functions y Cloud Run .

La excepción son las solicitudes que devuelven errores 404. La CDN almacena en caché la respuesta 404 de su servicio a una URL inexistente durante 10 minutos, de modo que las solicitudes posteriores para esa URL se atiendan desde la CDN. Si cambia su servicio para que el contenido ahora exista en esta URL, la CDN continúa entregando cualquier 404 almacenado en caché durante 10 minutos (como máximo) y luego entrega contenido de esa URL normalmente.

Si una respuesta 404 ya contiene encabezados de almacenamiento en caché establecidos por su servicio Cloud Functions o Cloud Run, anulan el valor predeterminado de 10 minutos y determinan completamente el comportamiento de almacenamiento en caché de la CDN.

Obtenga más información sobre el comportamiento del almacenamiento en caché en la documentación para desarrolladores web de Google.

Establecer control de caché

La herramienta principal que utiliza para administrar el caché de contenido dinámico es el encabezado Cache-Control . Al configurar este encabezado, puede comunicar tanto al navegador como a la CDN durante cuánto tiempo se puede almacenar en caché su contenido. En su función, configura Cache-Control así:

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

En este encabezado de ejemplo, las directivas hacen tres cosas:

  • public : marca el caché como public . Esto significa que tanto el navegador como los servidores intermedios (es decir, la CDN para Firebase Hosting) pueden almacenar en caché el contenido.

  • max-age : le indica al navegador y a la CDN cuántos segundos pueden almacenar en caché el contenido. Cuando expire el tiempo establecido, el navegador y la CDN deberán revalidar el contenido con el servidor de origen. En el encabezado del ejemplo, permitimos que el navegador y la CDN almacenen en caché el contenido durante cinco minutos (consulte s-maxage a continuación para conocer controles específicos para el almacenamiento en caché de CDN).

  • s-maxage : anula la directiva max-age solo para el almacenamiento en caché de CDN; le dice a la CDN cuántos segundos puede almacenar en caché el contenido. Cuando expire el tiempo establecido, la CDN deberá revalidar el contenido con el servidor de origen. En el encabezado del ejemplo, anulamos la configuración de max-age solo para la CDN y permitimos que la CDN almacene en caché el contenido durante diez minutos.

Para max-age y s-maxage , establezca sus valores en la cantidad de tiempo más larga con la que se sienta cómodo con los usuarios que reciben contenido obsoleto. Si una página cambia cada pocos segundos, utilice un valor de tiempo pequeño. Sin embargo, otros tipos de contenido se pueden almacenar en caché de forma segura durante horas, días o incluso meses.

Puede obtener más información sobre el encabezado Cache-Control en Mozilla Developer Network y en la documentación para desarrolladores web de Google.

¿Cuándo se entrega el contenido en caché?

El navegador y la CDN almacenan en caché su contenido en función de:

  • El nombre de host
  • El camino
  • La cadena de consulta
  • El contenido de los encabezados de solicitud especificados en el encabezado Vary .

Variar encabezados

El encabezado Vary determina qué encabezados de solicitud deben usarse para proporcionar una respuesta adecuada (si el contenido almacenado en caché es válido o si el contenido debe revalidarse con el servidor de origen).

Firebase Hosting establece automáticamente un encabezado Vary apropiado en su respuesta para situaciones comunes. La mayoría de las veces, no necesita preocuparse por el encabezado Vary . Sin embargo, en algunos casos de uso avanzado, es posible que tenga otros encabezados que necesite para afectar el caché. Cuando ese sea el caso, puede configurar el encabezado Vary en su respuesta. Por ejemplo:

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

En este caso, el valor del encabezado Vary es:

vary: X-My-Custom-Header, x-fh-requested-host, accept-encoding, cookie, authorization

Con esta configuración, dos solicitudes idénticas con diferentes encabezados X-My-Custom-Header se almacenan en caché por separado. Tenga en cuenta que Hosting agrega Cookie y Authorization al encabezado Vary de forma predeterminada cuando se realiza una solicitud de contenido dinámico. Esto garantiza que cualquier sesión o encabezado de autorización de cookies que utilice forme parte de la clave de caché, lo que evita fugas accidentales de contenido.

Tenga en cuenta también:

  • Sólo se pueden almacenar en caché las solicitudes GET y HEAD . Las solicitudes HTTPS que utilizan otros métodos nunca se almacenan en caché.

  • Tenga cuidado al agregar configuraciones al encabezado Vary . Cuantas más configuraciones agregue, menos probable será que la CDN pueda servir contenido almacenado en caché. Recuerde también que Vary se basa en los encabezados de solicitud , no en los encabezados de respuesta .

Usando cookies

Cuando se utiliza Firebase Hosting junto con Cloud Functions o Cloud Run, las cookies generalmente se eliminan de las solicitudes entrantes. Esto es necesario para permitir un comportamiento eficiente de la caché CDN. Solo la cookie __session con un nombre especial puede pasar a la ejecución de su aplicación.

Cuando está presente, la cookie __session pasa automáticamente a formar parte de la clave de caché, lo que significa que es imposible que dos usuarios con cookies diferentes reciban la respuesta almacenada en caché del otro. Utilice únicamente la cookie __session si su aplicación ofrece contenido diferente según la autorización del usuario.