Administración de cuánto tiempo se mantiene el contenido en una caché (vencimiento) - Amazon CloudFront

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.

De forma predeterminada, cada archivo caduca automáticamente después de 24 horas, pero puede cambiar el comportamiento predeterminado de dos maneras:

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.

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 y Cache-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.

  • La directiva stale-while-revalidate permite a CloudFront distribuir contenido obsoleto desde la caché mientras obtiene de forma asíncrona una versión nueva del origen. Esto mejora la latencia, ya que los usuarios reciben respuestas inmediatamente desde las ubicaciones periféricas de CloudFront sin tener que esperar a que se recupere en segundo plano y se carga contenido nuevo en segundo plano para solicitudes futuras.

    En el siguiente ejemplo, CloudFront almacena en caché la respuesta durante una hora (max-age=3600). Si se realiza una solicitud después de este periodo, CloudFront distribuye el contenido obsoleto y, al mismo tiempo, envía una solicitud al origen para revalidar y actualizar el contenido almacenado en caché. El contenido obsoleto se ofrece durante un máximo de 10 minutos (stale-while-revalidate=600) mientras se vuelve a validar el contenido.

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

    CloudFront servirá 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.

  • La directiva stale-if-error 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.

    En el siguiente ejemplo, 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 periodo, CloudFront seguirá distribuyendo el contenido obsoleto durante un máximo de 24 horas (stale-if-error=86400).

    Cache-Control: max-age=3600, stale-if-error=86400
    nota

    CloudFront servirá 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.

    Cuando se configuran stale-if-error y las respuestas de error personalizadas, CloudFront primero intenta 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 o el contenido ha superado la duración de stale-if-error, CloudFront distribuye las respuestas de error personalizadas configuradas para el código de estado del error correspondiente.

Uso de ambos juntos

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.

En el siguiente ejemplo, CloudFront almacena en caché la respuesta durante una hora (max-age=3600). Si se realiza una solicitud después de este periodo, 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).

Cache-Control: max-age=3600, stale-while-revalidate=600, stale-if-error=86400
sugerencia

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 o Expires 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 Cache-Control: max-age al objeto

Almacenamiento en caché de CloudFront

CloudFront almacena en caché el objeto para el menor valor de la directiva Cache-Control: max-age o el valor de TTL máximo de CloudFront.

Almacenamiento en caché de navegadores

Los navegadores almacenan en caché el objeto para el valor de la directiva Cache-Control: max-age.

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 Cache-Control max-age:

  • Si TTL mínimo < max-age < TTL máximo, CloudFront almacena en caché el objeto para el valor de la directiva Cache-Control: max-age.

  • Si max-age < TTL mínimo, CloudFront almacena en caché el objeto para el valor del TTL mínimo de CloudFront.

  • Si max-age > TTL máximo, CloudFront almacena en caché el objeto para el valor del TTL máximo de CloudFront.

Almacenamiento en caché de navegadores

Los navegadores almacenan en caché el objeto para el valor de la directiva Cache-Control: max-age.

El origen no agrega una directiva Cache-Control: max-age al objeto

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 Cache-Control: max-age y Cache-Control: s-maxage al objeto

Almacenamiento en caché de CloudFront

CloudFront almacena en caché el objeto para el menor valor de la directiva Cache-Control: s-maxage o el valor de TTL máximo de CloudFront.

Almacenamiento en caché de navegadores

Los navegadores almacenan en caché el objeto para el valor de la directiva Cache-Control max-age.

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 Cache-Control: s-maxage:

  • Si TTL mínimo < s-maxage < TTL máximo, CloudFront almacena en caché el objeto para el valor de la directiva Cache-Control: s-maxage.

  • Si s-maxage < TTL mínimo, CloudFront almacena en caché el objeto para el valor del TTL mínimo de CloudFront.

  • Si s-maxage > TTL máximo, CloudFront almacena en caché el objeto para el valor del TTL máximo de CloudFront.

Almacenamiento en caché de navegadores

Los navegadores almacenan en caché el objeto para el valor de la directiva Cache-Control: max-age.

El origen añade un encabezado Expires al objeto

Almacenamiento en caché de CloudFront

CloudFront almacena en caché el objeto hasta la fecha del encabezado Expires o el valor del TTL máximo de CloudFront, lo que suceda antes.

Almacenamiento en caché de navegadores

Los navegadores almacenan el objeto en la caché hasta la fecha del encabezado Expires.

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 Expires:

  • Si TTL mínimo < Expires < TTL máximo, CloudFront almacena en caché el objeto hasta la fecha y hora del encabezado Expires.

  • Si Expires < TTL mínimo, CloudFront almacena en caché el objeto para el valor del TTL mínimo de CloudFront.

  • Si Expires > TTL máximo, CloudFront almacena en caché el objeto para el valor del TTL máximo de CloudFront.

Almacenamiento en caché de navegadores

Los navegadores almacenan el objeto en la caché hasta la fecha y hora del encabezado Expires.

El origen agrega directivas Cache-Control: no-cache, no-store o private al objeto

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.

Añadido de encabezados a los objetos con la consola de Amazon S3

Para agregar un campo de encabezado Cache-Control o Expires a objetos de Amazon S3 mediante la consola de Amazon S3
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. En la lista de buckets, elija el nombre del bucket que contenga los archivos a los que agregará encabezados.

  3. Active la casilla de verificación situada junto al nombre del archivo o la carpeta a la que agregará encabezados. Cuando agrega encabezados a una carpeta, afecta a todos los archivos dentro de esa carpeta.

  4. Elija Actions (Acciones) y luego Edit metadata (Editar metadatos).

  5. En el panel Add metadata (Agregar metadatos), haga lo siguiente:

    1. Elija Add metadata (Agregar metadatos).

    2. En Type (Tipo), elija System defined (Definido por el sistema).

    3. Para Key (Clave), elija el nombre del encabezado que agregará (Cache-Control o Expires).

    4. En Value (Valor), introduzca un valor de encabezado. Por ejemplo, para un encabezado Cache-Control, introduzca max-age=86400. Para Expires, introduzca una fecha y hora de caducidad tal como Wed, 30 Jun 2021 09:28:00 GMT.

  6. En la parte inferior de la página, elija Edit metadata (Editar metadatos).