Descripción de la clave de caché
La clave de caché determina si una solicitud del lector a una ubicación de borde de CloudFront da como resultado un acierto de caché. La clave de caché es el identificador único de un objeto en la caché. Cada objeto de la caché tiene una clave de caché única.
Un acierto de caché se produce cuando una solicitud de lector genera la misma clave de caché que una solicitud anterior y el objeto de esa clave de caché está en la caché de la ubicación de borde y es válido. Cuando hay un acierto de caché, el objeto solicitado atiende al lector desde una ubicación de borde de CloudFront, lo que tiene los siguientes beneficios:
-
Carga reducida en el servidor de origen
-
Latencia reducida para el lector
Puede obtener un mejor rendimiento de su sitio web o aplicación cuando tiene una proporción de aciertos de caché mayor (una mayor proporción de solicitudes de lectores que dan lugar a un acierto de caché). Una forma de mejorar la proporción de aciertos de caché es incluir solo los valores mínimos necesarios en la clave de caché. Para obtener más información, consulte las siguientes secciones.
Puede modificar los valores (cadenas de consulta de URL, encabezados HTTP y cookies) en la clave de caché mediante una política de caché. (También puede modificar la clave de caché mediante una función de Lambda@Edge o una función de CloudFront cuando lo solicite un espectador). Antes de modificar la clave de caché, es importante comprender cómo se diseña la aplicación y cuándo y cómo es posible que sirva diferentes respuestas en función de las características de la solicitud del lector. Cuando un valor de la solicitud del lector determina la respuesta que devuelve el origen, debe incluir ese valor en la clave de caché. Pero si incluye un valor en la clave de caché que no afecta a la respuesta que devuelve su origen, es posible que termine almacenando en caché objetos duplicados.
Clave de caché predeterminada
De forma predeterminada, la clave de caché de una distribución de CloudFront incluye la siguiente información:
-
El nombre de dominio de la distribución de CloudFront (por ejemplo, d111111abcdef8.cloudfront.net)
-
La ruta URL del objeto solicitado (por ejemplo,
/content/stories/example-story.html
)
nota
El método OPTIONS
se incluye en la clave de caché para solicitudes OPTIONS
. Esto significa que las respuestas a las solicitudes OPTIONS
se almacenan en caché por separado de las respuestas a solicitudes GET
y HEAD
.
Otros valores de la solicitud del lector no se incluyen en la clave de caché, de forma predeterminada. Considere la siguiente solicitud HTTP desde un navegador web.
GET /content/stories/example-story.html?ref=0123abc&split-pages=false HTTP/1.1 Host: d111111abcdef8.cloudfront.net User-Agent: Mozilla/5.0 Gecko/20100101 Firefox/68.0 Accept: text/html,*/* Accept-Language: en-US,en Cookie: session_id=01234abcd Referer: https://news.example.com/
Cuando una solicitud de lector como la de este ejemplo entra en una ubicación periférica de CloudFront, CloudFront usa la clave de caché para determinar si hay un acierto de caché. De forma predeterminada, solo los siguientes componentes de la solicitud se incluyen en la clave de caché: /content/stories/example-story.html
y d111111abcdef8.cloudfront.net
. Si el objeto solicitado no está en la caché (un error de caché), CloudFront envía una solicitud al origen para obtener el objeto. Después de obtener el objeto, CloudFront lo devuelve al lector y lo almacena en la caché de la ubicación de borde.
Cuando CloudFront recibe otra solicitud para el mismo objeto, según lo determinado por la clave de caché, CloudFront sirve el objeto almacenado en caché al lector inmediatamente, sin enviar una solicitud al origen. Por ejemplo, considere la siguiente solicitud HTTP que aparece después de la solicitud anterior.
GET /content/stories/example-story.html?ref=xyz987&split-pages=true HTTP/1.1 Host: d111111abcdef8.cloudfront.net User-Agent: Mozilla/5.0 AppleWebKit/537.36 Chrome/83.0.4103.116 Accept: text/html,*/* Accept-Language: en-US,en Cookie: session_id=wxyz9876 Referer: https://rss.news.example.net/
Esta solicitud es para el mismo objeto que la solicitud anterior, pero es diferente de la solicitud anterior. Tiene una cadena de consulta de URL diferente, encabezados User-Agent
y Referer
diferentes y una cookie de session_id
diferente. Sin embargo, ninguno de estos valores forma parte de la clave de caché de forma predeterminada, por lo que esta segunda solicitud da como resultado un acierto de caché.
Personalización de la clave de caché
En algunos casos, es posible que desee incluir más información en la clave de caché, aunque al hacerlo es posible que dé como resultado menos aciertos de la caché. Se especifica qué incluir en la clave de caché mediante una política de caché.
Por ejemplo, si el servidor de origen utiliza el encabezado HTTP Accept-Language
en las solicitudes del lector para devolver contenido diferente en función del idioma del lector, es posible que desee incluir este encabezado en la clave de caché. Al hacerlo, CloudFront utiliza este encabezado para determinar los aciertos de caché e incluye el encabezado en solicitudes de origen (solicitudes que CloudFront envía al origen cuando hay un error de caché).
Una consecuencia potencial de incluir valores adicionales en la clave de caché es que es posible que CloudFront termine almacenando en caché objetos duplicados debido a la variación que puede ocurrir en las solicitudes del lector. Por ejemplo, es posible que los lectores puedan enviar cualquiera de los siguientes valores para el encabezado Accept-Language
:
-
en-US,en
-
en,en-US
-
en-US, en
-
en-US
Todos estos valores diferentes indican que el idioma del lector es el inglés, pero la variación puede hacer que CloudFront almacene en caché el mismo objeto varias veces. Esto puede reducir los aciertos de caché y aumentar el número de solicitudes de origen. Se puede evitar esta duplicación si no se incluye el encabezado Accept-Language
en la clave de caché y, en su lugar, se configura su sitio web o aplicación para utilizar diferentes URL para el contenido en diferentes idiomas (por ejemplo, /en-US/content/stories/example-story.html
).
Para cualquier valor dado que se pretenda incluir en la clave de caché, se debe estar seguro de comprender cuántas variaciones diferentes de ese valor es posible que aparezcan en las solicitudes del lector. Para ciertos valores de solicitud, rara vez tiene sentido incluirlos en la clave de caché. Por ejemplo, el encabezado User-Agent
puede tener miles de variaciones únicas, por lo que generalmente no es un buen candidato para incluirlo en la clave de caché. Las cookies que tienen valores específicos del usuario o específicos de la sesión y son únicas en miles (o incluso millones) de solicitudes tampoco son buenos candidatos para la inclusión de claves de caché. Si incluye estos valores en la clave de caché, cada variación única da como resultado otra copia del objeto en la caché. Si estas copias del objeto no son únicas o si termina con un número tan grande de objetos ligeramente diferentes que cada objeto solo obtiene un pequeño número de aciertos de caché, es posible que desee considerar un enfoque diferente. Puede excluir estos valores altamente variables de la clave de caché o puede marcar objetos como no almacenables en caché.
Tenga cuidado al personalizar la clave de caché. A veces es deseable, pero puede tener consecuencias no deseadas como almacenar en caché objetos duplicados, reducir la proporción de aciertos de caché y aumentar el número de solicitudes de origen. Si su sitio web o aplicación de origen necesita recibir ciertos valores de las solicitudes del lector para análisis, telemetría u otros usos, pero estos valores no cambian el objeto que devuelve el origen, utilice una política de solicitud de origen para incluir estos valores en las solicitudes de origen pero no incluirlos en la clave de caché.