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
Para distribuciones, puede elegir si desea que CloudFront reenvíe cadenas de consultas al 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. Cuando un usuario consulta el sitio web, las solicitudes que se reenvían a CloudFront incluyen un parámetro de cadena de consulta de idioma en función del idioma elegido por el usuario. Puede configurar CloudFront para reenviar cadenas de consulta al origen y almacenar en caché en función del parámetro de idioma. Si configura el servidor web para devolver la versión de una página determinada que se corresponda con el idioma seleccionado, CloudFront almacena en la caché cada versión del 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 para el sitio web es main.html
, las siguientes cinco solicitudes hacen que CloudFront almacene cinco veces en la caché main.html
, una vez por cada valor de 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 configura CloudFront para reenviar los parámetros de cadenas de consulta al origen, CloudFront sigue almacenando en caché en función de los valores de los parámetros a pesar de que el origen devuelva versiones idénticas del objeto a CloudFront para cada valor del 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 imprevistos, en función de los parámetros que especifique para que CloudFront utilice como base para el almacenamiento en caché y del orden en el que aparecen los parámetros en la cadena de consulta.Los siguientes ejemplos muestran lo que ocurre si utiliza un delimitador diferente y configura CloudFront para almacenar en caché solo en función del parámetro
color
:-
En la siguiente solicitud, CloudFront almacena en caché el contenido en función del valor del parámetro
color
, pero CloudFront interpreta el valor comored;size=large
:https://d111111abcdef8.cloudfront.net/images/image.jpg?
color=red;size=large
-
En la siguiente solicitud, CloudFront almacena en caché el contenido pero no en función de los parámetros de cadenas de consulta. Esto se debe a que ha configurado CloudFront para almacenar en caché en función del parámetro
color
, pero CloudFront interpreta la siguiente cadena como que contiene solo un parámetrosize
con el valorlarge;color=red
:https://d111111abcdef8.cloudfront.net/images/image.jpg?
size=large;color=red
-
Puede configurar CloudFront para que realice una de las siguientes acciones:
-
No enviar cadenas de consultas al origen. Si no reenvía cadenas de consultas, CloudFront no almacena 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é.
Temas
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 almacenamiento en caché de cadenas de consulta en la consola de CloudFront, consulte los siguientes ajustes en Referencia de configuración de la distribución:
Para configurar el reenvío y el almacenamiento en caché de cadenas de consulta con la API de CloudFront, consulte la siguiente configuración en DistributionConfig y en DistributionConfigWithTags en la Referencia de la API de Amazon CloudFront:
-
QueryString
-
QueryStringCacheKeys
Optimización del almacenamiento en caché
Cuando se configura CloudFront para almacenar en caché en función de parámetros de cadenas de consulta, puede realizar los siguientes pasos para reducir el número de solicitudes que CloudFront reenvía al origen. Cuando las ubicaciones periférica de CloudFront sirven objetos, se reduce la carga en el servidor de origen y se reduce la latencia porque los objetos se sirven 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
-
Por cada parámetro de cadena de consulta que la aplicación web reenvía a CloudFront, CloudFront reenvía solicitudes al origen por cada valor del parámetro y almacena en caché una versión independiente del objeto por cada valor del 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.
Le recomendamos configurar CloudFront para almacenar en caché solo los parámetros de cadenas de consulta para los que el origen devuelve distintas versiones y que piense detenidamente en las ventajas de almacenar 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 configurar CloudFront para almacenar en caché solo en función del parámetro de color, no el de tamaño. Esto aumenta la probabilidad de que CloudFront pueda atender una solicitud de la caché, lo que mejora el rendimiento y reduce la carga en el 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 que CloudFront reenvíe dos solicitudes de image.jpg independientes al origen y que almacene en caché dos versiones independientes 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 diferencia mayúsculas de minúsculas en los valores y nombres de los parámetros al almacenar en caché en función de los parámetros de cadenas 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 que CloudFront reenvíe cuatro solicitudes de image.jpg independientes al origen y que almacene en caché cuatro versiones independientes 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 utiliza URL firmadas para restringir el acceso al contenido (si ha agregado signatarios de confianza a la distribución), CloudFront elimina los siguientes parámetros de cadenas de consulta antes de reenviar el resto de la URL al origen:
-
Expires
-
Key-Pair-Id
-
Policy
-
Signature
Si utiliza URL firmadas y desea configurar CloudFront para reenviar cadenas de consulta al origen, sus propios parámetros de cadenas de consulta no pueden denominarse
Expires
,Key-Pair-Id
,Policy
niSignature
. -
Parámetros de cadena de consulta y registros estándar de CloudFront (registros de acceso)
Si habilita el registro, CloudFront registra la URL completa, incluidos los parámetros de cadenas de consulta. Esto ocurre independientemente de si ha configurado CloudFront para reenviar cadenas de consulta al origen. Para obtener más información acerca del registro de CloudFront, consulte Configuración y uso de registros estándar (registros de acceso).