Almacenamiento en caché de contenido en función de encabezados de solicitud - Amazon CloudFront

Almacenamiento en caché de contenido en función de encabezados de solicitud

CloudFront le permite elegir si desea que CloudFront reenvíe los encabezados al origen y almacene en caché diferentes versiones de un objeto especificado en función de los valores de encabezado de las solicitudes de los lectores. Esto le permite ofrecer distintas versiones del contenido en función del dispositivo del usuario, la ubicación del espectador, su idioma y otros criterios.

Encabezados y distribuciones: información general

De forma predeterminada, CloudFront no tiene en cuenta los encabezados al almacenar los objetos en la caché en ubicaciones periférica. Si el origen devuelve dos objetos que se diferencian solo por los valores de los encabezados de solicitud, CloudFront almacena solo una versión del objeto en la caché.

Puede configurar CloudFront para reenviar los encabezados al origen, lo que hace que CloudFront almacene en caché varias versiones de un objeto en función de los valores en uno o varios encabezados de solicitud. Para configurar CloudFront para almacenar en caché los objetos en función de los valores de encabezados específicos, se especifica la configuración del comportamiento de la caché para la distribución. Para obtener más información, consulte Caché en función de encabezados de solicitud seleccionados.

Supongamos que las solicitudes de espectadores de logo.jpg contienen un encabezado personalizado Product con un valor de Acme o Apex. Al configurar CloudFront para que almacene en caché los objetos en función del valor del encabezado Product, CloudFront reenvía solicitudes de logo.jpg al origen e incluye el encabezado Product y los valores del encabezado. CloudFront almacena en caché logo.jpg una vez por cada solicitud cuyo valor del encabezado Product es Acme y otra vez por cada solicitud cuyo valor es Apex.

Puede configurar cada comportamiento de la caché en una distribución para realizar una de las siguientes acciones:

  • Reenviar todos los encabezados al origen

    nota

    Para configuraciones de caché heredadas: si configura CloudFront para reenviar todos los encabezados al origen, CloudFront no almacena en caché los objetos asociados con este comportamiento de la caché. En su lugar, envía todas las solicitudes al origen.

  • Reenvíe una lista de encabezados que especifique. CloudFront almacena en caché los objetos en función de los valores de todos los encabezados especificados. CloudFront también reenvía los encabezados que reenvía de forma predeterminada, pero almacena en caché los objetos solo según los encabezados que especifique.

  • Reenviar solo los encabezados predeterminados. En esta configuración, CloudFront no almacena los objetos en caché en función de los valores de los encabezados de solicitudes.

Para consultar la cuota actual de la cantidad de encabezados que puede reenviar para cada comportamiento de la caché o para solicitar una ampliación de la cuota, consulte Cuotas en encabezados.

Para obtener información acerca del uso de la consola de CloudFront para actualizar una distribución de modo que CloudFront reenvíe encabezados al origen, consulte Actualizar una distribución. Para obtener información sobre el uso de la API de CloudFront para actualizar una distribución existente, consulte Actualizar distribución en la Referencia de la API de Amazon CloudFront.

Selección de los encabezados para basar el almacenamiento en caché

Los encabezados que puede reenviar al origen y en los que CloudFront basa el almacenamiento en caché dependen de si el origen es un bucket de Amazon S3 o un origen personalizado.

  • Amazon S3: puede configurar CloudFront para reenviar y almacenar en caché los objetos en función de un número de encabezados específicos (consulte la lista de excepciones que se muestra a continuación). Sin embargo, le recomendamos que evite reenviar encabezados con un origen de Amazon S3, excepto que necesite implementar el uso compartido de recursos entre orígenes (CORS) o desee personalizar contenido mediante Lambda@Edge en eventos producidos en el origen.

    • Para configurar CORS, debe reenviar encabezados que permitan a CloudFront distribuir contenido para sitios web que están habilitados para el uso compartido de recursos entre orígenes (CORS). Para obtener más información, consulte Configuración de CloudFront para que respete la configuración de CORS.

    • Para personalizar el contenido mediante el uso de encabezados que reenvía al origen de Amazon S3, debe escribir y agregar funciones Lambda@Edge y asociarlas a la distribución de CloudFront para desencadenarlas mediante un evento producido en el origen. Para obtener más información acerca del uso de encabezados para personalizar contenido, consulte Personalización de contenido por encabezados de tipo de dispositivo o país: ejemplos.

      Le recomendamos que evite reenviar encabezados que no esté utilizando para la personalización de contenido, ya que el reenvío de encabezados adicionales puede reducir la tasa de aciertos de caché. Es decir, CloudFront; no puede atender tantas solicitudes de cachés perimetrales, como una proporción de todas las solicitudes.

  • Origen personalizado: puede configurar CloudFront para almacenar en caché en función del valor de cualquier encabezado de solicitud, excepto los siguientes:

    • Connection

    • Cookie: si desea reenviar y almacenar en caché en función de las cookies, utilice otra configuración diferente en la distribución. Para obtener más información, consulte Almacenamiento en caché de contenido en función de cookies.

    • Host (for Amazon S3 origins)

    • Proxy-Authorization

    • TE

    • Upgrade

    Puede configurar CloudFront para almacenar en caché los objetos en función de los valores de los encabezados Date y User-Agent, pero no lo recomendamos. Estos encabezados tienen muchos valores posibles y el almacenamiento en caché en función de los valores podría hacer que CloudFront reenvíe una cantidad de solicitudes significativamente mayor al origen.

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).

Configuración de CloudFront para que respete la configuración de CORS

Si ha habilitado el uso compartido de recursos entre orígenes (CORS) en un bucket de Amazon S3 o en un origen personalizado, debe elegir encabezados específicos para reenviar, para respetar la configuración CORS. Los encabezados que debe reenviar difieren en función del origen (Amazon S3 o personalizado) y si desea almacenar las respuestas de OPTIONS en caché.

Amazon S3

  • Si desea que las respuestas OPTIONS se almacenen en caché, haga lo siguiente:

    • Elija las opciones para la configuración de comportamiento de la caché predeterminado que habilitan el almacenamiento en caché para respuestas de OPTIONS.

    • Configure CloudFront para reenviar los siguientes encabezados: Origin, Access-Control-Request-Headers, y Access-Control-Request-Method.

  • Si no desea que las respuestas de OPTIONS se almacenen en caché, configure CloudFront para reenviar el encabezado Origin, junto con los demás encabezados requeridos por el origen (por ejemplo Access-Control-Request-Headers, Access-Control-Request-Method u otros).

Orígenes personalizados: reenvíe el encabezado Origin junto con los demás encabezados exigidos por el origen.

Para configurar CloudFront con el fin de que almacene en caché en caché en función de CORS, debe configurar CloudFront para reenviar los encabezados mediante una política de caché. Para obtener más información, consulte Control de la clave de caché con una política.

Para obtener más información sobre CORS y Amazon S3, consulte Uso compartido de recursos entre orígenes (CORS) en la Guía del usuario de Amazon Simple Storage Service.

Configuración del almacenamiento en caché en función del tipo de dispositivo

Si desea que CloudFront almacene en caché diferentes versiones de los objetos en función del dispositivo que el usuario utilice para consultar el contenido, configure CloudFront para reenviar los encabezados aplicables al origen personalizado:

  • CloudFront-Is-Desktop-Viewer

  • CloudFront-Is-Mobile-Viewer

  • CloudFront-Is-SmartTV-Viewer

  • CloudFront-Is-Tablet-Viewer

En función del valor del encabezado User-Agent, CloudFront establece el valor de estos encabezados en true o false antes de reenviar la solicitud al origen. Si un dispositivo entra en más de una categoría, más de un valor podría ser true. Por ejemplo, en el caso de algunas tabletas, CloudFront podría establecer tanto CloudFront-Is-Mobile-Viewer como CloudFront-Is-Tablet-Viewer en true.

Configuración del almacenamiento en caché en función del idioma del lector

Si desea que CloudFront almacene en caché distintas versiones de los objetos en función del idioma especificado en la solicitud, configure CloudFront para reenviar el encabezado Accept-Language al origen.

Configuración del almacenamiento en caché en función de la ubicación del lector

Si desea que CloudFront almacene en caché distintas versiones de los objetos en función del país del que provino la solicitud, configure CloudFront para reenviar el encabezado CloudFront-Viewer-Country al origen. CloudFront convierte automáticamente la dirección IP de la que provino la solicitud en un código de país de dos letras. Para obtener una lista sencilla de códigos de país, organizable por código y por nombre de país, consulte la entrada de Wikipedia ISO 3166-1 alpha-2.

Configuración del almacenamiento en caché en función del protocolo de la solicitud

Si desea que CloudFront almacene en caché distintas versiones de los objetos en función del protocolo de la solicitud (HTTP o HTTPS), configure CloudFront para reenviar el encabezado CloudFront-Forwarded-Proto al origen.

Configuración del almacenamiento en caché para archivos comprimidos

Si el origen admite compresión Brotli, puede almacenar en caché en función del encabezado Accept-Encoding. Configure el almacenamiento en caché en función de Accept-Encoding solo si el origen ofrece contenido en función del encabezado.

Cómo afecta al rendimiento el almacenamiento en caché en función de los encabezados

Si configura CloudFront para almacenar en caché en función de uno o varios encabezados y los encabezados tienen más de un valor posible, CloudFront reenvía más solicitudes al servidor de origen para el mismo objeto. Esto afecta negativamente el desempeño y aumenta la carga en su servidor de origen. Si el servidor de origen devuelve el mismo objeto independientemente del valor de un encabezado determinado, le recomendamos que no configure CloudFront para almacenar en caché en función de ese encabezado.

Si configura CloudFront para reenviar más de un encabezado, el orden de los encabezados de las solicitudes de los lectores no afecta al almacenamiento en caché siempre y cuando los valores sean los mismos. Por ejemplo, si una solicitud contiene los encabezados A:1,B:2 y otra solicitud contiene B:2,A:1, CloudFront almacena en caché solo una copia del objeto.

Cómo afectan al almacenamiento en caché las mayúsculas o minúsculas de los encabezados y sus valores

Cuando CloudFront almacena en caché en función de los valores del encabezado, pasa por alto el uso de mayúsculas y minúsculas en los nombres de encabezado, pero lo tiene en cuenta en el caso del valor de encabezado:

  • Si las solicitudes de lector incluyen Product:Acme y product:Acme, CloudFront almacena en caché un objeto solo una vez. La única diferencia entre ellos es el uso de mayúsculas y minúsculas en el nombre del encabezado, lo que no afecta el almacenamiento en caché.

  • Si las solicitudes de lector incluyen Product:Acme y Product:acme, CloudFront almacena en caché un objeto dos veces, porque el valor es Acme en algunas solicitudes y acme en otras.

Encabezados que CloudFront devuelve al lector

La configuración de CloudFront para reenviar y almacenar en caché los encabezados no afecta a los encabezados que CloudFront devuelve al lector. CloudFront devuelve todos los encabezados que obtiene del origen con algunas excepciones. Para obtener más información, consulte el tema correspondiente: