Almacenamiento en caché de contenido en función de parámetros de cadenas de consulta - Amazon CloudFront

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Almacenamiento en caché de contenido en función de parámetros de cadenas de consulta

Algunas aplicaciones web utilizan cadenas de consulta para enviar información al origen. Una cadena de consulta es la parte de una solicitud web que aparece después de un carácter ? y puede contener uno o varios parámetros, separados por caracteres &. En el siguiente ejemplo, la cadena de consulta incluye dos parámetros, color=red y size=large:

https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red&size=large

En el caso de las distribuciones, puede elegir si desea CloudFront reenviar las cadenas de consulta a su origen y si desea almacenar en caché el contenido en función de todos los parámetros o de los parámetros seleccionados. ¿Por qué podría resultar útil? Considere el siguiente ejemplo.

Supongamos que su sitio web está disponible en cinco idiomas. La estructura de directorios y los nombres de archivo de las cinco versiones del sitio web son idénticos. A medida que un usuario visita tu sitio web, se reenvían las solicitudes para CloudFront incluir un parámetro de cadena de consulta de idioma en función del idioma que haya elegido el usuario. Puede configurarlas CloudFront para que reenvíen las cadenas de consulta al origen y se almacenen en caché en función del parámetro de idioma. Si configura su servidor web para devolver la versión de una determinada página que se corresponda con el idioma seleccionado, CloudFront almacena en la caché cada versión de idioma por separado, en función del valor del parámetro de cadena de consulta del idioma.

En este ejemplo, si la página principal de su sitio web lo esmain.html, las cinco solicitudes siguientes hacen CloudFront que se almacene en caché main.html cinco veces, una por cada valor del parámetro de cadena de consulta de idioma:

  • https://d111111abcdef8.cloudfront.net/main.html?language=de

  • https://d111111abcdef8.cloudfront.net/main.html?language=en

  • https://d111111abcdef8.cloudfront.net/main.html?language=es

  • https://d111111abcdef8.cloudfront.net/main.html?language=fr

  • https://d111111abcdef8.cloudfront.net/main.html?language=jp

Tenga en cuenta lo siguiente:

  • Algunos servidores HTTP no procesan parámetros de cadenas de consulta y, por lo tanto, no devuelven distintas versiones de un objeto en función de los valores de los parámetros. Para estos orígenes, si se configura CloudFront para reenviar los parámetros de la cadena de consulta al origen, se CloudFront seguirá almacenando en caché en función de los valores de los parámetros, aunque el origen devuelva versiones idénticas del objeto CloudFront para cada valor de parámetro.

  • Para que los parámetros de cadenas de consulta funcionen tal y como se describe en el ejemplo anterior con los idiomas, debe utilizar el carácter & como delimitador entre parámetros de cadenas de consulta. Si utiliza un delimitador diferente, es posible que obtenga resultados inesperados, en función de los parámetros que especifique que se van CloudFront a utilizar como base para el almacenamiento en caché y del orden en que aparecen los parámetros en la cadena de consulta.

    En los siguientes ejemplos, se muestra lo que ocurre si utiliza un delimitador diferente y lo configura CloudFront para almacenar en caché basándose únicamente en el parámetro: color

    • En la siguiente solicitud, almacena en CloudFront caché el contenido en función del valor del color parámetro, pero CloudFront interpreta el valor como rojo; size=large:

      https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red;size=large

    • En la siguiente solicitud, almacena en CloudFront caché el contenido, pero no basa el almacenamiento en caché en los parámetros de la cadena de consulta. Esto se debe CloudFront a que configuró la caché en función del color parámetro, pero CloudFront interpreta que la siguiente cadena contiene solo un size parámetro cuyo valor es large; color=red:

      https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large;color=red

Puede configurarlo CloudFront para realizar una de las siguientes acciones:

  • No enviar cadenas de consultas al origen. Si no envía cadenas de consultas, CloudFront no almacenará en caché en función de parámetros de cadenas de consulta.

  • Reenviar cadenas de consulta al origen y almacenar en caché en función de todos los parámetros de la cadena de consulta.

  • Reenviar cadenas de consulta al origen y almacenar en caché en función de parámetros especificados en la cadena de consulta.

Para obtener más información, consulte Optimización del almacenamiento en caché.

Configuración de la consola y de la API para el reenvío de cadenas de consulta y almacenamiento en caché

Para configurar el reenvío y el almacenamiento en caché de las cadenas de consulta en la CloudFront consola, consulte las siguientes opciones en: Valores que deben especificarse al crear o actualizar una distribución

Para configurar el reenvío y el almacenamiento en caché de cadenas de consulta con la CloudFront API, consulta los siguientes ajustes en la DistributionConfigreferencia de la CloudFront API de Amazon: DistributionConfigWithTags

  • QueryString

  • QueryStringCacheKeys

Optimización del almacenamiento en caché

Si configura CloudFront la caché en función de los parámetros de la cadena de consulta, puede seguir los siguientes pasos para reducir la cantidad de solicitudes que se reenvían a CloudFront su origen. Cuando las ubicaciones de CloudFront borde sirven objetos, se reduce la carga en el servidor de origen y se reduce la latencia, ya que los objetos se entregan desde ubicaciones más cercanas a los usuarios.

Almacene en caché solo en función de parámetros por los que su origen devuelve diferentes versiones de un objeto

Para cada parámetro de cadena de consulta al que reenvía tu aplicación web CloudFront, CloudFront reenvía las solicitudes a tu origen para cada valor de parámetro y almacena en caché una versión independiente del objeto para cada valor de parámetro. Esto ocurre incluso si el origen siempre devuelve el mismo objeto independientemente del valor del parámetro. Para varios parámetros, el número de solicitudes y el número de objetos se multiplican. Por ejemplo, si las solicitudes de un objeto incluyen dos parámetros que tienen tres valores diferentes, CloudFront almacena en caché seis versiones de ese objeto, suponiendo que siga las demás recomendaciones de esta sección.

Le recomendamos que configure CloudFront la caché en función únicamente de los parámetros de la cadena de consulta para los que el origen devuelva versiones diferentes y que considere detenidamente las ventajas del almacenamiento en caché en función de cada parámetro. Supongamos que tiene un sitio web de venta al por menor. Dispone de imágenes de una chaqueta en seis colores diferentes y la chaqueta está disponible en diez tallas distintas. Sus imágenes de la chaqueta muestran los distintos colores, pero no las distintas tallas. Para optimizar el almacenamiento en caché, debe CloudFront configurarlo en función únicamente del parámetro de color, no del parámetro de tamaño. Esto aumenta la probabilidad de que CloudFront pueda atender una solicitud de la memoria caché, lo que mejora el rendimiento y reduce la carga en el lugar de origen.

Organice los parámetros siempre en el mismo orden

El orden de los parámetros de cadenas de consulta es importante. En el siguiente ejemplo, las cadenas de consulta son idénticas, salvo que los parámetros están en órdenes diferentes. Esto hace CloudFront que se reenvíen dos solicitudes distintas de image.jpg al origen y que se almacenen en caché dos versiones distintas del objeto:

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red&size=large

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large&color=red

Le recomendamos enumerar los nombres de los parámetros siempre en el mismo orden, por ejemplo, por orden alfabético.

Utilice siempre el mismo tipo de letra (mayúsculas o minúsculas) para los nombres y valores de parámetros

CloudFront considera el caso de los nombres y valores de los parámetros al almacenar en caché en función de los parámetros de la cadena de consulta. En el siguiente ejemplo, las cadenas de consulta son idénticas, salvo por las mayúsculas y minúsculas de los nombres y valores del parámetro. Esto hace CloudFront que se reenvíen cuatro solicitudes distintas de image.jpg al origen y que se almacenen en caché cuatro versiones distintas del objeto:

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?color=red

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?color=Red

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?Color=red

  • https://d111111abcdef8.cloudfront.net/images/image.jpg?Color=Red

Recomendamos utilizar mayúsculas o minúsculas de forma consistente en los valores y nombres de parámetros, como todo en minúsculas.

No utilice nombres de parámetros que entren en conflicto con URL firmadas

Si utilizas direcciones URL firmadas para restringir el acceso a tu contenido (si has añadido firmantes de confianza a tu distribución), CloudFront elimina los siguientes parámetros de la cadena de consulta antes de reenviar el resto de la URL a tu origen:

  • Expires

  • Key-Pair-Id

  • Policy

  • Signature

Si utilizas direcciones URL firmadas y quieres configurarlas para reenviar las cadenas de consulta CloudFront a tu origen, tus propios parámetros de cadena de consulta no pueden tener el nombreExpires,, Key-Pair-Id o. Policy Signature

Parámetros de cadenas de consulta y registros CloudFront estándar (registros de acceso)

Si habilita el registro, CloudFront registra la URL completa, incluidos los parámetros de la cadena de consulta. Esto es cierto independientemente de si se ha configurado CloudFront para reenviar las cadenas de consulta al origen. Para obtener más información sobre el CloudFront registro, consulteConfiguración y uso de registros estándar (registros de acceso).