Control de la memoria caché de origen

En este documento, se explica cómo Cloudflare interpreta los encabezados de control de la memoria caché desde los servidores de origen de los clientes cuando se habilita la función «Origin Cache Control» mediante una Page Rule.

Los encabezados de control de la memoria caché permiten que los administradores informen a Cloudflare sobre la mejor forma de manejar el contenido que ofrece su servidor de origen.

Capacidad de almacenamiento en la memoria caché

Cloudflare adopta decisiones sobre el almacenamiento en la memoria caché en dos fases: una fase de solicitud y una fase de respuesta.

Fase de solicitud

En la fase de solicitud, la dirección URL que solicita el cliente se compara con una lista de extensiones que se pueden almacenar en la memoria caché. Si la solicitud coincide con una extensión de esta lista, analizamos nuestra memoria caché para encontrar el contenido y lo ofrecemos si lo encontramos. Si el contenido está en la memoria caché pero es obsoleto, se intentará revalidar el contenido con el origen antes de enviarle la respuesta al cliente.

Se puede modificar lo que consideramos almacenable en la memoria caché mediante la configuración del «Cache Level» en la aplicación Caché del panel de Cloudflare. Por ejemplo, «Cache Everything» omite la verificación de extensión y todo el contenido se considera almacenable en la memoria caché. También es posible ajustar estas configuraciones mediante una Page Rule.

Fase de respuesta

En el caso de que Cloudflare considere que una solicitud se puede almacenar en la memoria caché, analizaremos primero nuestra memoria caché en varias ubicaciones de la red en busca de contenido. Si el recurso no se encuentra en la memoria caché, Cloudflare realizará una solicitud al servidor de origen para completar la memoria caché.

La respuesta recibida se le envía al cliente que ha realizado la solicitud.

En ese momento, nuestra lógica de la memoria caché analiza la respuesta HTTP recibida del servidor de origen.

Según la interpretación de los encabezados de la solicitud, la respuesta se considerará almacenable en la memoria caché y se escribirá en el disco (que se utilizará para la próxima solicitud del objeto), o se considerará que no se puede almacenar en la memoria caché (por consiguiente, faltará la memoria caché en la siguiente solicitud y se repetirá este proceso).

Directivas de control de la memoria caché

El encabezado del control de la memoria caché puede incluir varias directivas. Si se envían varias directivas juntas, cada una se separa de la otra mediante una coma. Si la directiva incluye un argumento, este sigue a la directiva separada por un signo igual.

En términos generales, las directivas se dividen en agrupaciones amplias en torno a la capacidad de almacenamiento en la memoria caché (¿debería este objeto entrar en una memoria caché?), la caducidad (¿cuánto tiempo debería permanecer en la memoria caché?), la revalidación (¿cómo debería comportarse la memoria caché cuando un objeto ha «caducado»?) y algunos otros aspectos que controlan la forma en que la memoria caché debe gestionar el contenido. 

Capacidad de almacenamiento en la memoria caché

  • public
    La directiva de respuesta «public» indica que cualquier memoria caché PUEDE almacenar la respuesta, incluso si la respuesta no se almacena generalmente en la memoria caché o se almacena solo dentro de una memoria caché privada.
  • private
    La directiva de respuesta «private» indica que el mensaje de respuesta está destinado a un solo usuario (p. ej., la memoria caché del navegador) y NO DEBE almacenarse en una memoria caché compartida (como Cloudflare o un proxy corporativo).
  • no-store
    La directiva de respuesta «no store» indica que cualquier memoria caché (es decir, una memoria caché de cliente o proxy) NO DEBE almacenar ninguna parte de la solicitud o respuesta inmediatas.

Caducidad

Además de configurar los parámetros siguientes, asegúrese de que el encabezado HTTP Expires se haya configurado en su servidor web de origen para utilizar el formato de la hora del meridiano de Greenwich (GMT) como se estipula en el RFC 2616.
  • max-age=<seconds>
    La directiva de respuesta «max-age» indica que la respuesta debe considerarse obsoleta después de que su vigencia sea mayor al número de segundos especificado. La vigencia se define como el tiempo en segundos a partir del cual se ha ofrecido el recurso desde el servidor de origen. El segundo argumento es un número entero sin comillas.
  • s-maxage=<seconds>
    La directiva de respuesta «s-maxage» indica que, en la memoria caché compartida, la vigencia máxima especificada por esta directiva anula la vigencia máxima especificada, ya sea por la directiva max-age o por el campo del encabezado Expires.  La directiva s-maxage también incluye la semántica de la directiva de respuesta para la revalidación proxy.
  • no-cache
    La directiva de respuesta «no-cache» indica que la respuesta NO DEBE utilizarse para solucionar una solicitud posterior sin una validación correcta en el servidor de origen. Como consecuencia, un servidor de origen impide que se utilice una memoria caché para solucionar una solicitud sin contactarlo, incluso con una memoria caché configurada para el envío de respuestas obsoletas.

Revalidación

  • must-revalidate
    La directiva de respuesta «must-revalidate» indica que, una vez que la respuesta haya quedado obsoleta, una memoria caché (cliente o proxy) NO DEBE utilizar esta respuesta para solucionar solicitudes posteriores sin una validación correcta en el servidor de origen.
  • proxy-revalidate
    La directiva de respuesta «proxy-revalidate» tiene el mismo significado que la directiva de respuesta must-revalidate, con la diferencia de que no se aplica a la memoria caché de clientes privados.
  • stale-while-revalidate=<seconds>
    Cuando se encuentra en una respuesta HTTP, la extensión stale-while-revalidate de Cache-Control indica que las memorias caché PUEDEN ofrecer la respuesta en la que aparece después de que se vuelva obsoleta, hasta el número indicado de segundos desde la caducidad del objeto. Nota: si Always Online está habilitado, se ignorará la directiva stale-while-revalidate.
  • stale-if-error=<seconds>
    La extensión stale-if-error de Cache-Control indica que cuando se encuentra un error, se PUEDE utilizar una respuesta obsoleta almacenada en la memoria caché para solucionar la solicitud, independientemente de la información actualizada. Nota: si Always Online está habilitada, se ignorará la directiva stale-if-error
    .

Otras directivas

  • no-transform
    La directiva de respuesta «no-transform» indica que un intermediario (independientemente de que se implemente una memoria caché) NO DEBE transformar la carga útil.
  • immutable
    Indica a los clientes que el cuerpo de la respuesta no cambiará con el tiempo. Si el recurso no ha caducado, no se modifica en el servidor y, por lo tanto, el cliente no debe enviar una revalidación condicional (p. ej., If-None-Match o If-Modified-Since) para buscar actualizaciones, incluso aunque el usuario actualice la página de manera explícita. Esta directiva no tiene efecto en la memoria caché pública como Cloudflare, pero sí cambia el comportamiento del navegador.
     

Ejemplos

Almacenar un recurso estático en la memoria caché

Cache-Control: public, max-age=86400

Asegurarse de que un recurso secreto nunca se almacene en la memoria caché

Cache-Control: no-store

Permitir que un recurso se almacene en los navegadores, pero no en una memoria caché de proxy

Cache-Control: private, max-age=3600

Permitir que un recurso se almacene en la memoria caché de cliente y proxy, pero darle preferencia a la revalidación cada vez que se ofrece el activo

Cache-Control: public, no-cache

Permitir que un recurso se almacene en la memoria caché de proxy, pero SOLICITAR la revalidación por el proxy cada vez que se ofrezca el activo

Cache-Control: public, no-cache, proxy-revalidate

o

Cache-Control: public, s-maxage=0

Permitir que un recurso se almacene en la memoria caché de proxy, pero SOLICITAR la revalidación por cualquier memoria caché cada vez que se ofrezca el activo

Cache-Control: public, no-cache, must-revalidate

Permitir que un recurso se almacene en la memoria caché, pero asegurarse de que el proxy no lo modifique

Cache-Control: public, no-transform

Tenga en cuenta que esta directiva también deshabilitará la transformación, como la compresión gzip o brotli, desde nuestra memoria caché perimetral a sus visitantes si la carga útil original se ha ofrecido sin comprimir.

Permitir que un recurso se almacene en la memoria caché y preferir la revalidación, pero permitir que las respuestas obsoletas se ofrezcan si el servidor de origen es inaccesible o causa errores

Cache-Control: public, max-age=3600, stale-if-error=60

Cloudflare intentará revalidar el contenido con el servidor de origen después de que se haya almacenado en la memoria caché durante 3600 segundos (1 hora). Si el servidor devuelve un error en lugar de las respuestas correctas de revalidación, Cloudflare continuará ofreciendo el recurso obsoleto durante un total de 1 minuto, independientemente de la caducidad del recurso.

Almacenar un recurso de la memoria caché durante diferentes periodos de tiempo en Cloudflare y en el navegador de un visitante

Cache-Control: public, max-age=7200, s-maxage=3600

Almacenar un recurso en la memoria caché y ofrecerlo mientras se está revalidando

Cache-Control: max-age=600, stale-while-revalidate=30

Indica que será válido durante 600 segundos y que puede seguir siendo obsoleto hasta 30 segundos adicionales con el fin de igualar las solicitudes para el mismo recurso mientras se intenta la revalidación sincrónica inicial.

Interacción con otras funciones de Cloudflare

TTL de la memoria caché perimetral

La configuración de una Page Rule del TTL de la memoria caché perimetral anula s-maxage y deshabilita las directivas de revalidación, si las hubiere. El encabezado original de control de la memoria caché se transmite en sentido descendente desde nuestra memoria caché perimetral, incluso si se ha anulado el TTL de la memoria caché perimetral.

TTL de la memoria caché del navegador

La configuración de las Page Rules del TTL de la memoria caché del navegador prevalece sobre la configuración de vigencia máxima que se transmite en sentido descendente desde nuestra memoria caché perimetral, por lo general, a los navegadores de sus visitantes.

Polish

Polish se deshabilita cuando se activa la directiva non-transform.

Gzip y otras compresiones

La compresión se deshabilita cuando se activa la directiva non-transform. Si se comprime el recurso original obtenido del servidor de origen, este activo se le ofrecerá comprimido al visitante. Si el recurso original no está comprimido, la compresión no se realizará.

¿No has encontrado una respuesta satisfactoria?

Nuestra herramienta de búsqueda puede contestar el 95% de las preguntas más comunes y es la mejor manera de conseguir una respuesta rápida.

Tecnología de Zendesk