Administración de cuánto tiempo se mantiene el contenido en una caché (vencimiento)
Puede controlar cuánto tiempo se mantienen los archivos en una caché de CloudFront antes de que CloudFront reenvíe otra solicitud al origen. Reducir la duración le permite ofrecer contenido dinámico. Aumentar la duración implica que sus usuarios podrán disfrutar de un mejor rendimiento ya que es más probable que sus archivos se ofrezcan directamente desde la caché perimetral. Una mayor duración también reduce la carga en el origen.
Normalmente, CloudFront ofrece un archivo desde una ubicación periférica durante el tiempo de almacenamiento en caché especificado por usted, es decir, hasta que el archivo venza. Después de que venza, la próxima vez que la ubicación periférica reciba una solicitud de un archivo, CloudFront reenviará la solicitud al servidor de origen para comprobar que la caché contiene la versión más reciente del archivo. La respuesta del origen depende de si el archivo ha cambiado:
-
Si la caché de CloudFront ya tiene la versión más reciente, el origen devuelve un código de estado
304 Not Modified
. -
Si la caché de CloudFront no tiene la versión más reciente, el origen devuelve un código de estado
200 OK
y la versión más reciente del archivo.
Si un archivo de una ubicación periférica no se solicita con frecuencia, es posible que CloudFront lo desaloje (lo elimine antes de su fecha de vencimiento) con el fin de dejar espacio para otros archivos que se hayan solicitado más recientemente.
Le recomendamos que actualice la política de caché de su distribución para administrar la duración de la caché. Si opta por no utilizar una política de caché, el TTL (período de vida) predeterminado es de 24 horas, pero puede actualizar la siguiente configuración para anular el predeterminado:
-
Para cambiar la duración del almacenamiento en caché de todos los archivos que coinciden con el mismo patrón de ruta, puede cambiar la configuración de CloudFront para Minimum TTL (TTL mínimo), Maximum TTL (TTL máximo) y Default TTL (TTL predeterminado) de un comportamiento de la caché. Para obtener información sobre los ajustes individuales, consulte Minimum TTL (TTL mínimo), Maximum TTL (TTL máximo) y Default TTL (TTL predeterminado) en Referencia de toda la configuración de distribución.
-
Para cambiar la duración del almacenamiento en caché de un archivo individual, puede configurar el origen para agregar un encabezado
Cache-Control
con la políticamax-age
os-maxage
, o un campo de encabezadoExpires
en el archivo. Para obtener más información, consulte Uso de encabezados para controlar la duración del almacenamiento en caché de objetos individuales.
Para obtener más información acerca de cómo Minimum TTL (TTL mínimo), Default TTL (TTL predeterminado) y Maximum TTL (TTL máximo) interactúan con las políticas max-age
y s-maxage
y con el campo de encabezado Expires
, consulte Especificación de cuánto tiempo CloudFront almacena objetos en caché.
También puede controlar durante cuánto tiempo los errores (como 404 Not Found
) permanecen en una caché de CloudFront antes de que CloudFront intente obtener de nuevo el objeto solicitado reenviando otra solicitud al origen. Para obtener más información, consulte Procesamiento de CloudFront de los códigos de estado HTTP 4xx y 5xx desde el origen.
Temas
Uso de encabezados para controlar la duración del almacenamiento en caché de objetos individuales
Puede utilizar los encabezados Cache-Control
y Expires
para controlar durante cuánto tiempo permanecen los objetos en la caché. La configuración de Minimum TTL (Tiempo de vida mínimo), Default TTL (Tiempo de vida predeterminado) y Maximum TTL (Tiempo de vida máximo) también afecta la duración del almacenamiento en caché, pero a continuación encontrará información general acerca de cómo los encabezados pueden influir en la duración de la caché:
-
La política
Cache-Control max-age
le permite especificar durante cuánto tiempo (en segundos) desea que un objeto permanezca en la caché antes de que CloudFront obtenga el objeto de nuevo del servidor de origen. El tiempo mínimo de caducidad compatible con CloudFront es de 0 segundos. El valor máximo es 100 años. Especifique el valor en el siguiente formato:Cache-Control: max-age=
segundos
Por ejemplo, la siguiente política indica a CloudFront que debe mantener el objeto asociado en la caché durante 3600 segundos (una hora):
Cache-Control: max-age=3600
Si desea que los objetos permanezcan en las cachés de borde de CloudFront por un tiempo distinto del que permanecen en las cachés de navegadores, puede utilizar las políticas
Cache-Control max-age
yCache-Control s-maxage
de forma conjunta. Para obtener más información, consulte Especificación de cuánto tiempo CloudFront almacena objetos en caché. -
El campo del encabezado
Expires
le permite especificar una fecha y hora de vencimiento con el formato indicado en RFC 2616, Hypertext Transfer Protocol -- HTTP/1.1 Section 3.3.1, Full Date, por ejemplo: Sat, 27 Jun 2015 23:59:59 GMT
Le recomendamos que utilice la directiva Cache-Control max-age
en lugar del campo de encabezado Expires
para controlar el almacenamiento de objetos en caché. Si especifica valores para Cache-Control max-age
y para Expires
, CloudFront utiliza solo el valor de Cache-Control max-age
.
Para obtener más información, consulte Especificación de cuánto tiempo CloudFront almacena objetos en caché.
No puede utilizar los campos de encabezado HTTP Cache-Control
ni Pragma
en una solicitud GET
de un lector para obligar a CloudFront a volver al servidor de origen para obtener el objeto. CloudFront ignora los campos de encabezado de las solicitudes de los lectores.
Para obtener más información acerca de los campos de encabezado Cache-Control
y Expires
, visite las siguientes secciones de RFC 2616, Hypertext Transfer Protocol -- HTTP/1.1:
Distribución de contenido obsoleto (caducado)
CloudFront admite las directivas de control de la caché Stale-While-Revalidate
y Stale-If-Error
. Puede usar estas directivas para especificar durante cuánto tiempo estará disponible el contenido obsoleto para los lectores.
Stale-While-Revalidate
Esta directiva permite a CloudFront distribuir contenido obsoleto desde la caché mientras CloudFront obtiene de forma asíncrona una versión nueva del origen. Esto mejora la latencia, ya que los lectores reciben respuestas inmediatamente desde las ubicaciones periféricas sin tener que esperar a la recuperación en segundo plano. El contenido nuevo se carga en segundo plano para futuras solicitudes.
ejemplo Ejemplo: Stale-While-Revalidate
CloudFront hace lo siguiente al configurar el encabezado Cache-Control
para que utilice estas directivas.
Cache-Control: max-age=3600, stale-while-revalidate=600
-
CloudFront almacenará en caché una respuesta durante una hora (
max-age=3600
). -
Si se realiza una solicitud después de este tiempo, CloudFront distribuye el contenido obsoleto y, al mismo tiempo, envía una solicitud al origen para revalidar y actualizar el contenido almacenado en caché.
-
Mientras el contenido se vuelve a validar, CloudFront distribuye el contenido obsoleto durante un máximo de 10 minutos (
stale-while-revalidate=600
).
nota
CloudFront distribuirá el contenido obsoleto hasta el valor de la directiva stale-while-revalidate
o el valor del TTL máximo de CloudFront, el valor que sea menor. Una vez transcurrida la duración máxima de TTL, el objeto obsoleto no estará disponible en la caché perimetral, independientemente del valor stale-while-revalidate
.
Stale-If-Error
Esta directiva permite a CloudFront distribuir contenido obsoleto desde la memoria caché si no se puede acceder al origen o devuelve el código de error que está entre 500 y 600. Esto garantiza que los espectadores puedan acceder al contenido incluso durante una interrupción del origen.
ejemplo Ejemplo: Stale-If-Error
CloudFront hace lo siguiente al configurar el encabezado Cache-Control
para que utilice estas directivas.
Cache-Control: max-age=3600, stale-if-error=86400
-
CloudFront almacena en caché la respuesta durante una hora (
max-age=3600
). -
Si el origen no funciona o devuelve un error después de este tiempo, CloudFront seguirá distribuyendo el contenido obsoleto durante un máximo de 24 horas (
stale-if-error=86400
) -
Si configuró respuestas de error personalizadas, CloudFront intentará distribuir el contenido obsoleto si se encuentra un error dentro de la duración de
stale-if-error
especificada. Si el contenido obsoleto no está disponible, CloudFront distribuirá las respuestas de error personalizadas configuradas para el código de estado del error correspondiente. Para obtener más información, consulte Generación de respuestas de error personalizadas.
Notas
-
CloudFront distribuirá el contenido obsoleto hasta el valor de la directiva
stale-if-error
o el valor del TTL máximo de CloudFront, el valor que sea menor. Una vez transcurrida la duración máxima de TTL, el objeto obsoleto no estará disponible en la caché perimetral, independientemente del valorstale-if-error
. -
Si no configura
stale-if-error
ni respuestas de error personalizadas, CloudFront devolverá el objeto obsoleto o reenviará la respuesta de error al lector, en función de si el objeto solicitado está en la caché perimetral o no. Para obtener más información, consulte Cómo CloudFront procesa los errores si no ha configurado las páginas de error personalizadas.
Uso de ambas directivas
stale-while-revalidate
y stale-if-error
son directivas de control de caché independientes que se pueden usar juntas para reducir la latencia y agregar un búfer para que el origen responda o se recupere.
ejemplo Ejemplo: Uso de ambas directivas
CloudFront hace lo siguiente al configurar el encabezado Cache-Control
para que utilice las siguientes directivas.
Cache-Control: max-age=3600, stale-while-revalidate=600, stale-if-error=86400
-
CloudFront almacena en caché la respuesta durante una hora (
max-age=3600
). -
Si se realiza una solicitud después de este tiempo, CloudFront distribuye el contenido obsoleto durante un máximo de 10 minutos (
stale-while-revalidate=600
) mientras se vuelve a validar el contenido. -
Si el servidor de origen devuelve un error mientras CloudFront intenta revalidar el contenido, CloudFront seguirá distribuyendo el contenido obsoleto durante un máximo de 24 horas (
stale-if-error=86400
).
El almacenamiento en caché es un equilibrio entre rendimiento y actualización. El uso de directivas como stale-while-revalidate
y stale-if-error
puede mejorar el rendimiento y la experiencia del usuario, pero asegúrese de que las configuraciones se ajusten a la actualización que desea que tenga el contenido. Las directivas de contenido obsoletas son las más adecuadas para casos de uso en los que es necesario actualizar el contenido, pero no es esencial tener la versión más reciente. Además, si el contenido no cambia o cambia con poca frecuencia, stale-while-revalidate
podría agregar solicitudes de red innecesarias. En su lugar, considere establecer una duración de caché larga.
Especificación de cuánto tiempo CloudFront almacena objetos en caché
Para controlar la cantidad de tiempo que CloudFront mantiene un objeto en la caché antes de enviar otra solicitud al origen, puede:
-
Establecer los valores TTL mínimo, máximo y predeterminado en el comportamiento de la caché de una distribución de CloudFront. Puede establecer estos valores en una política de caché adjunta al comportamiento de caché (recomendado) o en la configuración de caché heredada.
-
Incluya el encabezado
Cache-Control
oExpires
en las respuestas del origen. Estos encabezados también ayudan a determinar cuánto tiempo un explorador mantiene un objeto en la caché del explorador antes de enviar otra solicitud a CloudFront.
En la tabla siguiente se explica cómo los encabezados Cache-Control
y Expires
enviados desde el origen funcionan junto con la configuración TTL en un comportamiento de caché para afectar al almacenamiento en caché.
Encabezados de origen | Tiempo de vida mínimo = 0 | Tiempo de vida mínimo > 0 |
---|---|---|
El origen agrega una directiva de |
Almacenamiento en caché de CloudFront CloudFront almacena en caché el objeto para el menor valor de la directiva Almacenamiento en caché de navegadores Los navegadores almacenan en caché el objeto para el valor de la directiva |
Almacenamiento en caché de CloudFront El almacenamiento en caché de CloudFront depende de los valores del TTL mínimo y TTL máximo de CloudFront y de la directiva
Almacenamiento en caché de navegadores Los navegadores almacenan en caché el objeto para el valor de la directiva |
El origen no agrega una directiva |
Almacenamiento en caché de CloudFront CloudFront almacena en caché el objeto para el valor del TTL predeterminado de CloudFront. Almacenamiento en caché de navegadores Depende del navegador. |
Almacenamiento en caché de CloudFront CloudFront almacena en caché el objeto para el mayor valor del TTL mínimo de CloudFront o TTL predeterminado. Almacenamiento en caché de navegadores Depende del navegador. |
El origen agrega directivas |
Almacenamiento en caché de CloudFront CloudFront almacena en caché el objeto para el menor valor de la directiva Almacenamiento en caché de navegadores Los navegadores almacenan en caché el objeto para el valor de la directiva |
Almacenamiento en caché de CloudFront El almacenamiento en caché de CloudFront depende de los valores del TTL mínimo y TTL máximo de CloudFront y de la directiva
Almacenamiento en caché de navegadores Los navegadores almacenan en caché el objeto para el valor de la directiva |
El origen añade un encabezado |
Almacenamiento en caché de CloudFront CloudFront almacena en caché el objeto hasta la fecha del encabezado Almacenamiento en caché de navegadores Los navegadores almacenan el objeto en la caché hasta la fecha del encabezado |
Almacenamiento en caché de CloudFront El almacenamiento en caché de CloudFront depende de los valores de los TTL mínimo y máximo de CloudFront y del encabezado
Almacenamiento en caché de navegadores Los navegadores almacenan el objeto en la caché hasta la fecha y hora del encabezado |
El origen agrega directivas |
CloudFront y los navegadores respetan los encabezados. |
Almacenamiento en caché de CloudFront CloudFront almacena en caché el objeto para el valor del TTL mínimo de CloudFront. Consulte la advertencia debajo de esta tabla. Almacenamiento en caché de navegadores Los navegadores respetan los encabezados. |
aviso
Si el TTL mínimo es superior a 0, CloudFront utiliza el TTL mínimo de la política de caché, aunque las directivas Cache-Control: no-cache
, no-store
o private
estén presentes en los encabezados de origen.
Si se puede acceder al origen, CloudFront obtiene el objeto del origen y lo devuelve al lector.
Si no se puede acceder al origen o el TTL máximo es mayor que 0, CloudFront servirá el objeto que obtuvo del origen anteriormente.
Para evitar este comportamiento, incluya la directiva Cache-Control:
stale-if-error=0
con el objeto devuelto desde el origen. Esto hace que CloudFront devuelva un error en respuesta a solicitudes futuras si el origen es inalcanzable, en lugar de devolver el objeto que obtuvo del origen anteriormente.
Para obtener información acerca de cómo cambiar la configuración de distribuciones mediante la consola de CloudFront, consulte Actualizar una distribución. Para obtener información sobre cómo cambiar la configuración de las distribuciones con la API de Cloudfront; consulte UpdateDistribution.
Agregación de encabezados a los objetos con la consola de Amazon S3
Puede agregar el campo de encabezado Cache-Control
o Expires
a los objetos de Amazon S3. Para ello, debe modificar los campos de metadatos del objeto.
Agregación de un campo de encabezado Cache-Control
o Expires
a objetos de Amazon S3
-
Siga el procedimiento de la sección Sustitución de metadatos definidos por el sistema en el tema Edición de metadatos de objetos en la consola de Amazon S3 de la Guía del usuario de Amazon S3.
-
Para Key (Clave), elija el nombre del encabezado que agregará (Cache-Control o Expires).
-
En Value (Valor), introduzca un valor de encabezado. Por ejemplo, para un encabezado
Cache-Control
, introduzcamax-age=86400
. ParaExpires
, introduzca una fecha y hora de caducidad tal comoWed, 30 Jun 2021 09:28:00 GMT
. -
Siga el resto del procedimiento para guardar los cambios en los metadatos.