Comportamiento de solicitudes y respuestas para orígenes de Amazon S3 - Amazon CloudFront

Comportamiento de solicitudes y respuestas para orígenes de Amazon S3

Para entender cómo CloudFront procesa solicitudes y respuestas cuando se está utilizando Amazon S3 como origen, consulte las secciones siguientes:

Cómo CloudFront procesa y reenvía solicitudes a su origen de Amazon S3

Obtenga información sobre cómo CloudFront procesa solicitudes de lectores y las reenvía a su origen de Amazon S3.

Duración de almacenamiento en caché y TTL mínimo

Para controlar durante cuánto tiempo se mantienen los objetos en una caché de CloudFront antes de que CloudFront reenvíe otra solicitud al origen, puede:

  • Configure su origen para añadir un Cache-Control o un encabezado Expires para cada objeto.

  • Especificar un valor de TTL mínimo en comportamientos de la caché de CloudFront.

  • Utilice el valor de predeterminado de 24 horas.

Para obtener más información, consulte Administración de cuánto tiempo se mantiene el contenido en una caché (vencimiento).

Direcciones IP de clientes

Si un lector envía una solicitud a CloudFront y no incluye un encabezado de solicitud X-Forwarded-For, CloudFront obtiene la dirección IP del lector de la conexión TCP, agrega un encabezado X-Forwarded-For que incluya la dirección IP y reenvía la solicitud al origen. Por ejemplo, si CloudFront obtiene la dirección IP 192.0.2.2 de la conexión TCP, reenvía el siguiente encabezado al origen:

X-Forwarded-For: 192.0.2.2

Si un lector envía una solicitud a CloudFront e incluye un encabezado de solicitud X-Forwarded-For, CloudFront obtiene la dirección IP del lector de la conexión TCP, la agrega al final del encabezado X-Forwarded-For que incluya la dirección IP y reenvía la solicitud al origen. Por ejemplo, si la solicitud del lector incluye X-Forwarded-For: 192.0.2.4,192.0.2.3 y CloudFront obtiene la dirección IP 192.0.2.2 de la conexión TCP, reenvía el siguiente encabezado al origen:

X-Forwarded-For: 192.0.2.4,192.0.2.3,192.0.2.2

nota

El encabezado X-Forwarded-For contiene direcciones IPv4 (como 192.0.2.44) e IPv6 (como 2001:0db8:85a3::8a2e:0370:7334).

Solicitudes GET condicionales

Cuando CloudFront recibe una solicitud de un objeto que ha caducado en una caché perimetral, reenvía la solicitud al origen de Amazon S3 para obtener la última versión del objeto o para obtener la confirmación de Amazon S3 de que la caché perimetral de CloudFront ya dispone de la última versión. Cuando Amazon S3 envió el objeto originalmente a CloudFront, incluyó un valor ETag y un valor LastModified en la respuesta. En la nueva solicitud que CloudFront reenvía a Amazon S3, CloudFront agrega uno o ambos de los siguientes encabezados:

  • Un encabezado If-Match o If-None-Match que contenga el valor ETag para la versión caducada del objeto.

  • Un encabezado If-Modified-Since que contenga el valor LastModified para la versión caducada del objeto.

Amazon S3 utiliza esta información para determinar si el objeto se ha actualizado y, en consecuencia, si debe devolver todo el objeto a CloudFront o devolver solo un código de estado HTTP 304 (no modificado).

Cookies

Amazon S3 no procesa cookies. Si configura un comportamiento de caché para reenviar las cookies a un origen de Amazon S3, CloudFront reenvía las cookies, pero Amazon S3 las ignora. Todas las solicitudes futuras del mismo objeto, independientemente si varía la cookie, se atienden desde el objeto existente en la caché.

Uso compartido de recursos entre orígenes (CORS)

Si desea que CloudFront respete la configuración de intercambio de recursos entre orígenes de Amazon S3, configure CloudFront para que reenvíe los encabezados seleccionados a Amazon S3. Para obtener más información, consulte Almacenamiento en caché de contenido en función de encabezados de solicitud.

Solicitudes GET que incluyen un cuerpo

Si una solicitud GET del lector incluye un cuerpo, CloudFront devuelve un código de estado HTTP 403 (prohibido) al lector.

Métodos HTTP

Si configura CloudFront para procesar todos los métodos de HTTP que admite, CloudFront acepta las siguientes solicitudes de los lectores y los reenvía al origen de Amazon S3:

  • DELETE

  • GET

  • HEAD

  • OPTIONS

  • PATCH

  • POST

  • PUT

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 desea utilizar cargas de multipartes para agregar objetos a un bucket de Amazon S3, debe agregar un control de acceso de origen (OAC) de CloudFront a su distribución y conceder al OAC los permisos necesarios. Para obtener más información, consulte Restricción del acceso a un origen de Amazon Simple Storage Service.

importante

Si configura CloudFront para que acepte y reenvíe a Amazon S3 todos los métodos HTTP que CloudFront admite, debe crear un OAC de CloudFront para restringir el acceso a su contenido de Amazon S3 y conceder al OAC los permisos necesarios. Por ejemplo, si configura CloudFront para que acepte y reenvíe estos métodos porque desea utilizar el método PUT, debe configurar las políticas de buckets de Amazon S3 para que se ocupen de las solicitudes de DELETE de forma adecuada, de modo que los lectores no puedan eliminar recursos que usted no desea. Para obtener más información, consulte Restricción del acceso a un origen de Amazon Simple Storage Service.

Para obtener más información acerca de las operaciones admitidas por Amazon S3, consulte la documentación de Amazon S3.

Encabezados de solicitud HTTP que CloudFront elimina o actualiza

CloudFront elimina o actualiza algunos encabezado antes de reenviar solicitudes a su origen de Amazon S3. Para la mayoría de encabezados este comportamiento es el mismo que para orígenes personalizados. Para obtener una lista completa de encabezados de solicitudes HTTP y cómo los procesa CloudFront, consulte Encabezados de solicitudes HTTP y comportamiento de CloudFront (personalizado y orígenes de Amazon S3).

Longitud máxima de una solicitud y de una URL

La longitud máxima de una solicitud, incluida la ruta, la cadena de consulta (si procede) y los encabezados, es 20 480 bytes.

CloudFront crea una URL a partir de la solicitud. La longitud máxima de esta URL es de 8 192 bytes.

Si una solicitud o una URL supera la longitud máxima, CloudFront devuelve el código de estado HTTP 413 (entidad de solicitud demasiado grande), al lector y, a continuación, interrumpe la conexión TCP con el lector.

Asociación de OCSP

Cuando un lector envía una solicitud de un objeto HTTPS, CloudFront o el lector deben confirmar con la autoridad de certificación (CA) que el certificado SSL del dominio no se ha revocado. La asociación de OCSP agiliza la validación de certificados al permitir a CloudFront validar el certificado y almacenar en caché la respuesta de la CA, por lo que el cliente no tiene por qué validar el certificado directamente con la CA.

La mejora en el rendimiento de la asociación de OCSP es más notoria cuando CloudFront recibe una gran cantidad de solicitudes de HTTPS de objetos en el mismo dominio. Cada servidor en una ubicación periférica de CloudFront debe enviar una solicitud de validación independiente. Cuando CloudFront recibe una gran cantidad de solicitudes HTTPS para el mismo dominio, cada servidor de la ubicación periférica obtiene pronto una respuesta de la CA que puede asociar a un paquete en el protocolo de enlace de SSL. Cuando el lector confirme que el certificado es válido, CloudFront puede entregar el objeto solicitado. Si la distribución no recibe mucho tráfico en una ubicación periférica de CloudFront, es más probable que las nuevas solicitudes se dirijan a un servidor que todavía no haya validado el certificado con la CA. En ese caso, el lector realiza el paso de validación por separado y el servidor de CloudFront ofrece el objeto. Este servidor de CloudFront también envía una solicitud de validación a la CA, por lo que la próxima vez que recibe una solicitud que incluye el mismo nombre de dominio, cuenta con una respuesta de validación de la CA.

Protocolos

CloudFront reenvía las solicitudes de HTTP o HTTPS al servidor de origen en función del protocolo de la solicitud del lector, ya sea HTTP o HTTPS.

importante

Si su bucket de Amazon S3 se configura como un punto de enlace de sitio web, no puede configurar CloudFront para usar HTTPS para comunicarse con su origen porque Amazon S3 no admite conexiones HTTPS en dicha configuración.

Cadenas de consulta

Puede configurar si CloudFront reenvía parámetros de cadenas de consulta a su origen Amazon S3. Para obtener más información, consulte Almacenamiento en caché de contenido en función de parámetros de cadenas de consulta.

Tiempo de espera e intentos de conexión de origen

Origin connection timeout (Tiempo de espera de conexión de origen) es el número de segundos que CloudFront espera al intentar establecer una conexión con el origen.

Origin connection attempts (Intentos de conexión de origen) es el número de veces que CloudFront intenta conectarse al origen.

Juntos, estos parámetros determinan cuánto tiempo intenta CloudFront conectarse al origen antes de realizar una conmutación al origen secundario (en el caso de un grupo de orígenes) o devolver una respuesta de error al lector. De forma predeterminada, CloudFront espera hasta 30 segundos (3 intentos de 10 segundos cada uno) antes de intentar conectarse al origen secundario o devolver una respuesta de error. Puede reducir este tiempo si especifica menos intentos, un tiempo de espera de conexión más corto o ambas opciones.

Para obtener más información, consulte Control de tiempos de espera e intentos de origen.

Tiempo de espera de respuesta de origen

El tiempo de espera de respuesta del origen, también conocido como tiempo de espera de lectura del origen y tiempo de espera de solicitud al origen, se aplica a los dos siguientes:

  • El periodo de tiempo, en segundos, que CloudFront espera una respuesta después de enviar una solicitud al origen.

  • El periodo de tiempo, en segundos, que CloudFront espera después de recibir un paquete de una respuesta del origen y antes de recibir el paquete siguiente.

El comportamiento de CloudFront depende del método HTTP en la solicitud del lector:

  • Solicitudes GET y HEAD: si el origen no responde en un plazo de 30 segundos o deja de responder durante 30 segundos, CloudFront interrumpe la conexión. Si el número especificado de intentos de conexión de origen es superior a 1, CloudFront intenta obtener de nuevo una respuesta completa. CloudFront lo intenta hasta tres veces, según lo determinado por el valor de la opciónOrigin connection attempts (Intentos de conexión de origen). Si el origen no responde en el último intento, CloudFront no vuelve a intentarlo hasta que recibe una nueva solicitud de contenido en el mismo origen.

  • Solicitudes DELETE, OPTIONS, PATCH, PUT y POST: si el origen no responde en 30 segundos, CloudFront interrumpe la conexión y no vuelve a intentar ponerse en contacto con el origen. El cliente puede volver a enviar la solicitud en caso de que sea necesario.

No puede cambiar el tiempo de espera de respuesta para un origen de Amazon S3 (un bucket de S3 que no está configurado con alojamiento de sitio web estático).

Solicitudes simultáneas del mismo objeto (contracción de solicitudes)

Cuando una ubicación periférica de CloudFront recibe una solicitud de un objeto y este no se encuentra en la caché o el objeto ha caducado, CloudFront envía inmediatamente la solicitud al origen. Sin embargo, si hay solicitudes simultáneas del mismo objeto, es decir, si llegan solicitudes adicionales del mismo objeto (con la misma clave de caché) a la ubicación periférica antes de que CloudFront reciba la respuesta a la primera solicitud, CloudFront se pone en pausa antes de reenviar las solicitudes adicionales al origen. Esta breve pausa ayuda a reducir la carga en el origen. CloudFront envía la respuesta de la solicitud original a todas las solicitudes que recibió mientras estaba en pausa. Esto se llama contracción de solicitudes. En los registros de CloudFront, la primera solicitud se identifica como Miss en el campo x-edge-result-type, y las solicitudes contraídas se identifican como Hit. Para obtener más información sobre los registros de CloudFront, consulte Registro de funciones de CloudFront y perimetrales.

CloudFront solo contrae las solicitudes que comparten clave de caché. Si las solicitudes adicionales no son idénticas, porque, por ejemplo, ha configurado CloudFront para almacenar en caché en función de los encabezados de solicitudes o las cadenas de consulta, CloudFront reenvía todas las solicitudes únicas a su origen.

Si quiere evitar la contracción de todas las solicitudes, puede utilizar la política de caché administrada CachingDisabled, que también impide el almacenamiento en caché. Para obtener más información, consulte Uso de políticas de caché administradas.

Si quiere evitar la contracción de la solicitud para objetos específicos, puede establecer el TTL mínimo para el comportamiento de la caché en 0 y configurar el origen para enviar Cache-Control: private, Cache-Control: no-store, Cache-Control: no-cache, Cache-Control: max-age=0 o Cache-Control: s-maxage=0. Estas configuraciones aumentarán la carga en el origen e introducirán latencia adicional para las solicitudes simultáneas que se detienen mientras CloudFront espera la respuesta a la primera solicitud.

importante

Actualmente, CloudFront no admite la contracción de solicitudes si se habilita el reenvío de cookies en la política de caché, la política de solicitudes de origen o la configuración de caché antigua.

Cómo procesa CloudFront las respuestas de su origen de Amazon S3

Obtenga información sobre cómo procesa CloudFront las respuestas de su origen de Amazon S3

Solicitudes canceladas

Si un objeto no está en la caché perimetral y un lector termina una sesión (por ejemplo, cierra un navegador) después de que CloudFront obtiene el objeto solicitado del origen, pero antes de que pueda entregarlo, CloudFront no almacena el objeto en la caché de la ubicación periférica.

Encabezados de respuesta HTTP que CloudFront elimina o actualiza

CloudFront elimina o actualiza los siguientes campos de encabezado antes de reenviar la respuesta desde su origen de Amazon S3 al lector:

  • X-Amz-Id-2

  • X-Amz-Request-Id

  • Set-Cookie: si configura CloudFront para reenviar cookies, reenviará el campo del encabezado Set-Cookie a los clientes. Para obtener más información, consulte Almacenamiento en caché de contenido en función de cookies.

  • Trailer

  • Transfer-Encoding: si el origen de Amazon S3 devuelve este campo de encabezado CloudFront establece el valor en chunked antes de devolver la respuesta al lector.

  • Upgrade

  • Via: CloudFront establece el valor en lo siguiente en la respuesta al lector:

    Via: versión-http cadena-alfanumérica.cloudfront.net (CloudFront)

    Por ejemplo, el valor será similar a lo siguiente:

    Via: 1.1 1026589cc7887e7a0dc7827b4example.cloudfront.net (CloudFront)

Tamaño máximo de archivo que se puede almacenar en caché

El tamaño máximo de un cuerpo de respuesta que CloudFront guarda en su caché es de 50 GB. Eso incluye respuestas transferidas en fragmentos que no especifican el valor de encabezado Content-Length.

Puede utilizar CloudFront para almacenar en caché un objeto superior a este tamaño mediante solicitudes de rango para solicitar los objetos en partes de 50 GB o menos cada una. CloudFront almacena en caché estas partes porque cada una de ellas es de 50 GB o menos. Una vez que el lector recupera todas las partes del objeto, puede reconstruir el objeto original de mayor tamaño. Para obtener más información, consulte Uso de solicitudes de rango para almacenar en caché objetos grandes.

Redireccionamientos

Puede configurar un bucket de Amazon S3 para redirigir todas las solicitudes a otro nombre de host; este puede ser otro bucket de Amazon S3 o un servidor HTTP. Si configura un bucket para redirigir todas las solicitudes y es el origen de una distribución de CloudFront, le recomendamos configurarlo para redirigirlas a una distribución de CloudFront utilizando el nombre de dominio para la distribución (por ejemplo, d111111abcdef8.cloudfront.net) o un nombre alternativo de dominio (un CNAME) asociado a una distribución (por ejemplo, ejemplo.com). De lo contrario, las solicitudes de los lectores eluden CloudFront y los objetos se sirven directamente desde el nuevo origen.

nota

Si redirige solicitudes a un nombre de dominio alternativo, también debe actualizar el servicio de DNS del dominio mediante la adición de un registro CNAME. Para obtener más información, consulte Uso de URL personalizadas añadiendo nombres de dominio alternativos (CNAME).

Esto es lo que ocurre cuando configura un bucket para redirigir todas las solicitudes:

  1. Un lector (por ejemplo, un navegador) solicita un objeto de CloudFront.

  2. CloudFront reenvía la solicitud al bucket de Amazon S3 que es el origen de la distribución.

  3. Amazon S3 devuelve un código de estado HTTP 301 (movido permanentemente) y la nueva ubicación.

  4. CloudFront almacena en caché el código de estado de la redirección y la nueva ubicación, y devuelve los valores al lector. CloudFront no sigue la redirección para obtener el objeto de la nueva ubicación.

  5. El lector envía otra solicitud del objeto, pero esta vez el lector especifica la nueva ubicación que obtuvo de CloudFront:

    • Si el bucket de Amazon S3 está redirigiendo todas las solicitudes a una distribución de CloudFront usando el nombre de dominio para la distribución o un nombre de dominio alternativo, CloudFront solicita el objeto del bucket de Amazon S3 o del servidor HTTP en la nueva ubicación. Cuando la nueva ubicación devuelve el objeto, CloudFront lo devuelve al lector y lo almacena en caché en una ubicación periférica.

    • Si el bucket de Amazon S3 está redirigiendo las solicitudes a otra ubicación, la segunda solicitud elude CloudFront. El bucket de Amazon S3 o el servidor HTTP de la nueva ubicación devuelven el objeto directamente al lector, por lo que el objeto nunca se almacena en una caché perimetral de CloudFront.