Procesamiento de CloudFront de los códigos de estado HTTP 4xx y 5xx desde el origen - Amazon CloudFront

Procesamiento de CloudFront de los códigos de estado HTTP 4xx y 5xx desde el origen

Cuando CloudFront solicita un objeto desde su bucket de Amazon S3 o un servidor de origen personalizado, el origen a veces devuelve un código de estado HTTP 4xx o 5xx, que indica que se ha producido un error. El comportamiento de CloudFront depende de:

  • Si ha configurado páginas de error personalizadas

  • Si ha configurado el tiempo durante el que desea que CloudFront almacene en caché las respuestas de error de su origen (TTL mínimo de almacenamiento de errores en la caché)

  • El código del estado

  • En el caso de códigos de estado 5xx, si el objeto solicitado se encuentra en la caché perimetral de CloudFront

  • Para algunos códigos de estado 4xx, si el origen devuelve un encabezado Cache-Control max-age o Cache-Control s-maxage

CloudFront siempre almacena en caché las respuestas a las solicitudes GET y HEAD. También puede configurar CloudFront para almacenar en caché las respuestas a solicitudes OPTIONS. CloudFront no almacena en caché las respuestas a las solicitudes que utilizan los otros métodos.

Si el origen no responde, la solicitud de CloudFront al origen agota el tiempo de espera, lo que se considera un error HTTP 5xx del origen, aunque el origen no haya respondido con ese error. En ese caso, CloudFront sigue ofreciendo contenido almacenado en caché. Para obtener más información, consulte Origen no disponible.

Si ha activado el registro, CloudFront escribe los resultados en registros independientemente del código de estado HTTP.

Para obtener más información acerca de las características y las opciones relacionadas con el mensaje de error devuelto por CloudFront, consulte lo siguiente:

Cómo CloudFront procesa los errores cuando las páginas de error personalizadas están configuradas

Si ha configurado páginas de error personalizadas, el comportamiento de CloudFront dependerá de si el objeto solicitado está o no en la caché perimetral.

El objeto solicitado no está en la caché perimetral

CloudFront continúa intentando obtener el objeto solicitado de su origen si se cumplen todas las condiciones que se indican a continuación:

  • Un espectador solicita un objeto.

  • El objeto no está en la caché perimetral.

  • Su origen devuelve un código de estado HTTP 4xx o 5xx y se cumple alguna de las condiciones siguientes:

CloudFront hace lo siguiente:

  1. En la caché perimetral de CloudFront que recibió la solicitud del lector, CloudFront comprueba la configuración de la distribución y obtiene la ruta de la página de error personalizada que corresponde al código de estado devuelto por su origen.

  2. CloudFront comprueba el primer comportamiento de la caché de la distribución que tenga un patrón de ruta que coincida con la ruta de la página de error personalizada.

  3. La ubicación periférica de CloudFront envía una solicitud de la página de error personalizada al origen especificado en el comportamiento de la caché.

  4. El origen devuelve la página de error personalizada a la ubicación periférica.

  5. CloudFront devuelve la página de error personalizada al lector que ha realizado la solicitud y almacena en caché dicha página durante el tiempo máximo siguiente:

    • La cantidad de tiempo especificado por el TTL mínimo de almacenamiento en caché de errores (10 segundos de forma predeterminada)

    • El periodo de tiempo especificado por un encabezado Cache-Control max-age o un encabezado Cache-Control s-maxage que devuelve el origen cuando la primera solicitud generó el error

  6. Una vez transcurrido el tiempo de almacenamiento en caché (determinado en el paso 5), CloudFront intenta de nuevo obtener el objeto solicitado reenviando otra solicitud a su origen. CloudFront continúa intentándolo a intervalos especificados por el TTL mínimo de almacenamiento de errores en caché.

El objeto solicitado está en la caché perimetral

CloudFront continúa sirviendo el objeto que se encuentra en ese momento en la caché perimetral si se cumplen todas las condiciones que se indican a continuación:

  • Un espectador solicita un objeto.

  • El objeto se encuentra en la memoria caché de borde, pero ha caducado

  • Su origen devuelve un código de estado HTTP 5xx en lugar de devolver un código 304 (No modificado) o una versión actualizada del objeto.

CloudFront hace lo siguiente:

  1. Si el origen devuelve un código de estado 5xx, CloudFront sirve el objeto a pesar de que haya caducado. Durante el TTL mínimo de almacenamiento de errores en caché, CloudFront continúa respondiendo a las solicitudes de los lectores ofreciendo el objeto de la caché perimetral.

    Si el origen devuelve un código de estado 4xx, CloudFront devuelve el código de estado al lector en lugar del objeto solicitado.

  2. Una vez finalizado el TTL mínimo de almacenamiento de errores en caché, CloudFront intenta obtener el objeto solicitado una vez más reenviando otra solicitud al origen. Tenga en cuenta que si el objeto no se solicita con frecuencia, CloudFront podría desalojarlo de la caché perimetral mientras el servidor de origen sigue devolviendo respuestas 5xx. Para obtener más información acerca de por cuánto tiempo pueden permanecer los objetos en las cachés perimetrales de CloudFront, consulte Administración de cuánto tiempo se mantiene el contenido en una caché (vencimiento).

Cómo CloudFront procesa los errores cuando las páginas de error personalizadas no están configuradas

Si no ha configurado páginas de error personalizadas, el comportamiento de CloudFront dependerá de si el objeto solicitado está o no en la caché perimetral.

El objeto solicitado no está en la caché perimetral

CloudFront continúa intentando obtener el objeto solicitado de su origen si se cumplen todas las condiciones que se indican a continuación:

  • Un espectador solicita un objeto.

  • El objeto no está en la caché perimetral.

  • Su origen devuelve un código de estado HTTP 4xx o 5xx y se cumple alguna de las condiciones siguientes:

CloudFront hace lo siguiente:

  1. CloudFront devuelve un código de estado 4xx o 5xx al lector y también almacena el código de estado en la caché perimetral que recibió la solicitud durante el tiempo máximo siguiente:

    • La cantidad de tiempo especificado por el TTL mínimo de almacenamiento en caché de errores (10 segundos de forma predeterminada)

    • El periodo de tiempo especificado por un encabezado Cache-Control max-age o un encabezado Cache-Control s-maxage que devuelve el origen cuando la primera solicitud generó el error

  2. Para la duración del tiempo de almacenamiento en caché (determinado en el paso 1), CloudFront responde a las solicitudes de los lectores posteriores del mismo objeto con el código de estado almacenado en caché 4xx o 5xx.

  3. Una vez transcurrido el tiempo de almacenamiento en caché (determinado en el paso 1), CloudFront intenta de nuevo obtener el objeto solicitado reenviando otra solicitud a su origen. CloudFront continúa intentándolo a intervalos especificados por el TTL mínimo de almacenamiento de errores en caché.

El objeto solicitado está en la caché perimetral

CloudFront continúa sirviendo el objeto que se encuentra en ese momento en la caché perimetral si se cumplen todas las condiciones que se indican a continuación:

  • Un espectador solicita un objeto.

  • El objeto se encuentra en la memoria caché de borde, pero ha caducado

  • Su origen devuelve un código de estado HTTP 5xx en lugar de devolver un código 304 (No modificado) o una versión actualizada del objeto.

CloudFront hace lo siguiente:

  1. Si el origen devuelve un código de error 5xx, CloudFront sirve el objeto a pesar de que haya caducado. Durante la vigencia del TTL mínimo de almacenamiento en caché de errores (10 segundos de forma predeterminada), CloudFront continúa respondiendo a las solicitudes de los lectores sirviendo el objeto de la caché perimetral.

    Si el origen devuelve un código de estado 4xx, CloudFront devuelve el código de estado al lector en lugar del objeto solicitado.

  2. Una vez finalizado el TTL mínimo de almacenamiento de errores en caché, CloudFront intenta obtener el objeto solicitado una vez más reenviando otra solicitud al origen. Tenga en cuenta que si el objeto no se solicita con frecuencia, CloudFront podría desalojarlo de la caché perimetral mientras el servidor de origen sigue devolviendo respuestas 5xx. Para obtener más información acerca de por cuánto tiempo pueden permanecer los objetos en las cachés perimetrales de CloudFront, consulte Administración de cuánto tiempo se mantiene el contenido en una caché (vencimiento).

Códigos de estado HTTP 4xx y 5xx que CloudFront almacena en caché

CloudFront almacena en caché códigos de estado HTTP 4xx y 5xx devueltos por su origen, en función del código de estado específico que se devuelve y de si el origen devuelve encabezados específicos en la respuesta.

Códigos de estado HTTP 4xx y 5xx que CloudFront siempre almacena en caché

CloudFront siempre almacena en caché los siguientes códigos de estado HTTP 4xx y 5xx devueltos por el origen. Si ha configurado una página de error personalizada para un código de estado HTTP, CloudFront la almacena en caché.

404

no encontrado

414

URI de solicitud demasiado grande

500

Internal Server Error

501

No implementado

502

Puerta de enlace incorrecta

503

Servicio no disponible

504

Tiempo de espera de puerta de enlace agotado

Códigos de estado HTTP 4xx que CloudFront almacena en caché en función de los encabezados Cache-Control

CloudFront solo almacena en caché los siguientes códigos de estado HTTP 4xx devueltos por el origen si el origen devuelve un encabezado Cache-Control max-age o Cache-Control s-maxage. Si ha configurado una página de error personalizada para uno de estos códigos de estado HTTP, y el origen devuelve uno de los encabezados de control de la caché, CloudFront la almacena en caché.

400

solicitud errónea

403

Prohibido

405

método no permitido

412¹

Condición previa con error

415¹

Tipo de medio incompatible

¹ CloudFront no admite la creación de páginas de error personalizadas para estos códigos de estado HTTP.