Cómo funciona el almacenamiento en cachéHow caching works

En este artículo se proporciona información general acerca de conceptos generales del almacenamiento en caché y cómo Azure Content Delivery Network (CDN) usa este almacenamiento en caché para mejorar el rendimiento.This article provides an overview of general caching concepts and how Azure Content Delivery Network (CDN) uses caching to improve performance. Si desea obtener información sobre cómo personalizar el comportamiento del almacenamiento en caché en el punto de conexión CDN, consulte Control del comportamiento del almacenamiento en caché de Azure CDN con reglas de almacenamiento en caché y Control del comportamiento del almacenamiento en caché de Azure CDN con cadenas de consulta.If you’d like to learn about how to customize caching behavior on your CDN endpoint, see Control Azure CDN caching behavior with caching rules and Control Azure CDN caching behavior with query strings.

Introducción al almacenamiento en cachéIntroduction to caching

El almacenamiento en caché es el proceso de almacenar datos localmente para que se pueda tener acceso a las futuras solicitudes de esos datos más rápidamente.Caching is the process of storing data locally so that future requests for that data can be accessed more quickly. En el tipo más común de almacenamiento en caché, el almacenamiento en caché del explorador web, un explorador web almacena copias de datos estáticos localmente en una unidad de disco duro local.In the most common type of caching, web browser caching, a web browser stores copies of static data locally on a local hard drive. Mediante el uso del almacenamiento en caché, el explorador web puede evitar la realización de varias ida y vuelta al servidor y, en su lugar, obtener acceso a los mismos datos localmente, lo que permite ahorrar tiempo y recursos.By using caching, the web browser can avoid making multiple round-trips to the server and instead access the same data locally, thus saving time and resources. El almacenamiento en caché es ideal para administrar localmente datos pequeños y estáticos como imágenes estáticas, archivos CSS y archivos de JavaScript.Caching is well-suited for locally managing small, static data such as static images, CSS files, and JavaScript files.

De forma similar, una red de entrega de contenido utiliza el almacenamiento en caché en los servidores perimetrales más cercanos al usuario para evitar que las solicitudes vayan hasta el origen y reducir la latencia del usuario final.Similarly, caching is used by a content delivery network on edge servers close to the user to avoid requests traveling back to the origin and reducing end-user latency. A diferencia del almacenamiento en caché del explorador web, que es utilizado solo por un único usuario, la red CDN tiene una memoria caché compartida.Unlike a web browser cache, which is used only for a single user, the CDN has a shared cache. En el almacenamiento en caché compartido de la red CDN, un archivo que solicita un usuario puede tener acceso más adelante por otros usuarios, lo que reduce considerablemente el número de solicitudes al servidor de origen.In a CDN shared cache, a file that is requested by one user can be accessed later by other users, which greatly decreases the number of requests to the origin server.

No se almacenan en caché los recursos dinámicos que cambian con frecuencia o son únicos para un usuario individual.Dynamic resources that change frequently or are unique to an individual user cannot be cached. Dichos tipos de recursos, sin embargo, pueden sacar partido de la optimización de la aceleración de sitios dinámicos (DSA) en Azure Content Delivery Network para mejorar el rendimiento.Those types of resources, however, can take advantage of dynamic site acceleration (DSA) optimization on the Azure Content Delivery Network for performance improvements.

El almacenamiento en caché puede producirse en varios niveles entre el servidor de origen y el usuario final:Caching can occur at multiple levels between the origin server and the end user:

  • Servidor web: utiliza una caché compartida (para varios usuarios).Web server: Uses a shared cache (for multiple users).
  • Red de entrega de contenido: utiliza una caché compartida (para varios usuarios).Content delivery network: Uses a shared cache (for multiple users).
  • Proveedor de servicios de Internet (ISP): utiliza una caché compartida (para varios usuarios).Internet service provider (ISP): Uses a shared cache (for multiple users).
  • Explorador web: utiliza una memoria caché privada (para un usuario).Web browser: Uses a private cache (for one user).

Cada almacenamiento en caché normalmente administra su propia actualización de recursos y realiza la validación cuando un archivo está obsoleto.Each cache typically manages its own resource freshness and performs validation when a file is stale. Este comportamiento se define en la especificación de almacenamiento en caché de HTTP, RFC 7234.This behavior is defined in the HTTP caching specification, RFC 7234.

Actualización de recursosResource freshness

Dado que un recurso almacenado en caché podría estar obsoleto (en comparación con el recurso correspondiente en el servidor de origen), es importante para cualquier mecanismo de almacenamiento en caché controlar cuándo se actualiza el contenido.Because a cached resource can potentially be out-of-date, or stale (as compared to the corresponding resource on the origin server), it is important for any caching mechanism to control when content is refreshed. Para ahorrar en el consumo de tiempo y ancho de banda, un recurso almacenado en caché no se compara con la versión en el servidor de origen cada vez que se tiene acceso a él.To save time and bandwidth consumption, a cached resource is not compared to the version on the origin server every time it is accessed. En su lugar, siempre que se considere que un recurso almacenado en caché está actualizado, se supone que es la versión más reciente y se envía directamente al cliente.Instead, as long as a cached resource is considered to be fresh, it is assumed to be the most current version and is sent directly to the client. Se considera que un recurso almacenado en caché está actualizado cuando su antigüedad es menor que el tiempo o el período definido por una configuración de caché.A cached resource is considered to be fresh when its age is less than the age or period defined by a cache setting. Por ejemplo, cuando un explorador vuelve a cargar una página web, comprueba que cada recurso almacenado en caché en el disco duro está actualizado y lo carga.For example, when a browser reloads a web page, it verifies that each cached resource on your hard drive is fresh and loads it. Si el recurso no está actualizado (obsoleto), se carga una copia actualizada desde el servidor.If the resource is not fresh (stale), an up-to-date copy is loaded from the server.

ValidaciónValidation

Si un recurso se considera obsoleto, se solicita al servidor de origen que lo valide, es decir, que determine si los datos en la memoria caché aún coinciden con lo que aparecen en el servidor de origen.If a resource is considered to be stale, the origin server is asked to validate it, that is, determine whether the data in the cache still matches what’s on the origin server. Si el archivo se ha modificado en el servidor de origen, el almacenamiento en caché actualiza su versión del recurso.If the file has been modified on the origin server, the cache updates its version of the resource. En caso contrario, si el recurso está actualizado, los datos se entregan directamente desde la memoria caché sin validarlos primero.Otherwise, if the resource is fresh, the data is delivered directly from the cache without validating it first.

Almacenamiento en caché de la red CDNCDN caching

El almacenamiento en caché es una parte integral de la forma en que funciona una red CDN para acelerar la entrega y reducir la carga de origen para recursos estáticos como imágenes, fuentes y vídeos.Caching is integral to the way a CDN operates to speed up delivery and reduce origin load for static assets such as images, fonts, and videos. En el almacenamiento en caché de la red CDN, los recursos estáticos se almacenan selectivamente en servidores ubicados estratégicamente que sean más locales a un usuario y ofrece las siguientes ventajas:In CDN caching, static resources are selectively stored on strategically placed servers that are more local to a user and offers the following advantages:

  • Dado que la mayor parte del tráfico web es estático (por ejemplo, imágenes, fuentes y vídeos), el almacenamiento en caché de la red CDN reduce la latencia moviendo el contenido más cerca del usuario, lo que reduce la distancia que recorren los datos.Because most web traffic is static (for example, images, fonts, and videos), CDN caching reduces network latency by moving content closer to the user, thus reducing the distance that data travels.

  • Mediante la descarga de trabajo a una red CDN, el almacenamiento en caché puede reducir el tráfico de red y la carga en el servidor de origen.By offloading work to a CDN, caching can reduce network traffic and the load on the origin server. De este modo se reducen los requisitos de recursos y el costo de la aplicación, incluso si existen grandes cantidades de usuarios.Doing so reduces cost and resource requirements for the application, even when there are large numbers of users.

De modo similar a la implementación del almacenamiento en caché de un explorador web, puede controlar cómo se realiza el almacenamiento en caché de la red CDN mediante el envío de encabezados de directiva de caché.Similar to how caching is implemented in a web browser, you can control how caching is performed in a CDN by sending cache-directive headers. Los encabezados de directiva de caché son encabezados HTTP, normalmente agregados por el servidor de origen.Cache-directive headers are HTTP headers, which are typically added by the origin server. Aunque la mayoría de estos encabezados se diseñaron originalmente para tratar el almacenamiento en caché en los exploradores de cliente, ahora también se usan en todas las memorias caché intermedias, como las redes CDN.Although most of these headers were originally designed to address caching in client browsers, they are now also used by all intermediate caches, such as CDNs.

Se pueden utilizar dos encabezados para definir la actualización del almacenamiento en caché: Cache-Control y Expires.Two headers can be used to define cache freshness: Cache-Control and Expires. Cache-Control es más reciente y tiene prioridad sobre Expires, si ambos existen.Cache-Control is more current and takes precedence over Expires, if both exist. También hay dos tipos de encabezados que se utilizan para la validación (llamados validadores): ETag y Last-Modified.There are also two types of headers used for validation (called validators): ETag and Last-Modified. ETag es más reciente y tiene prioridad sobre Last-Modified, si ambos están definidos.ETag is more current and takes precedence over Last-Modified, if both are defined.

Encabezados de la directiva de cachéCache-directive headers

Importante

Un punto de conexión de red Azure CDN que está optimizado para DSA omite los encabezados de la directiva de caché y omite el almacenamiento en caché de forma predeterminada.By default, an Azure CDN endpoint that is optimized for DSA ignores cache-directive headers and bypasses caching. En el caso de los perfiles de Azure CDN Standard de Verizon y Azure CDN Standard de Akamai, puede ajustar el modo en que un punto de conexión de red de Azure CDN trata estos encabezados utilizando las reglas de caché de la red CDN para habilitar el almacenamiento en caché.For Azure CDN Standard from Verizon and Azure CDN Standard from Akamai profiles, you can adjust how an Azure CDN endpoint treats these headers by using CDN caching rules to enable caching. Si son solo perfiles de Azure CDN Premium de Verizon, use el motor de reglas para habilitar el almacenamiento en caché.For Azure CDN Premium from Verizon profiles only, you use the rules engine to enable caching.

Azure CDN admite los siguientes encabezados de directiva de caché HTTP, que definen la duración de la memoria caché y el uso compartido de la memoria caché:Azure CDN supports the following HTTP cache-directive headers, which define cache duration and cache sharing.

Cache-Control:Cache-Control:

  • Incorporado en HTTP 1.1 para conceder a los editores web más control sobre su contenido y para resolver las limitaciones del encabezado Expires.Introduced in HTTP 1.1 to give web publishers more control over their content and to address the limitations of the Expires header.
  • Invalida el encabezado Expires si este y Cache-Control están definidos.Overrides the Expires header, if both it and Cache-Control are defined.
  • Cuando se usa en una solicitud HTTP del cliente al servidor POP de CDN, todos los perfiles de Azure CDN omiten Cache-Control de forma predeterminada.When used in an HTTP request from the client to the CDN POP, Cache-Control is ignored by all Azure CDN profiles, by default.
  • Cuando se usa en una respuesta HTTP del cliente al servidor POP de CDN:When used in an HTTP response from the client to the CDN POP:
    • Azure CDN Estándar/Premium de Verizon y Azure CDN Estándar Microsoft admiten todas las directivas Cache-Control.Azure CDN Standard/Premium from Verizon and Azure CDN Standard from Microsoft support all Cache-Control directives.
    • Azure CDN Estándar de Akamai solo admite las siguientes directivas Cache-Control; todas las demás se omiten:Azure CDN Standard from Akamai supports only the following Cache-Control directives; all others are ignored:
      • max-age: una caché puede almacenar el contenido durante el número de segundos especificado.max-age: A cache can store the content for the number of seconds specified. Por ejemplo, Cache-Control: max-age=5.For example, Cache-Control: max-age=5. Esta directiva especifica la cantidad máxima de tiempo que el contenido se considera actualizado.This directive specifies the maximum amount of time the content is considered to be fresh.
      • no-cache: almacena el contenido en la caché, pero valida dicho contenido cada vez que se entrega desde dicha caché.no-cache: Cache the content, but validate the content every time before delivering it from the cache. Equivalente a Cache-Control: max-age=0.Equivalent to Cache-Control: max-age=0.
      • no-store: nunca se almacena en caché el contenido.no-store: Never cache the content. Se elimina el contenido si se ha almacenado anteriormente.Remove content if it has been previously stored.

Expira:Expires:

  • Encabezado heredado incorporado en HTTP 1.0; admitido por compatibilidad con versiones anteriores.Legacy header introduced in HTTP 1.0; supported for backwards compatibility.
  • Usa un tiempo de expiración basado en fechas con precisión de segundos.Uses a date-based expiration time with second precision.
  • Similar a Cache-Control: max-age.Similar to Cache-Control: max-age.
  • Se usa cuando no existe Cache-Control.Used when Cache-Control doesn't exist.

Pragma:Pragma:

  • Azure CDN no lo cumple de forma predeterminada.Not honored by Azure CDN, by default.
  • Encabezado heredado incorporado en HTTP 1.0; admitido por compatibilidad con versiones anteriores.Legacy header introduced in HTTP 1.0; supported for backwards compatibility.
  • Utilizado como un encabezado de solicitud de cliente con la siguiente directiva: no-cache.Used as a client request header with the following directive: no-cache. Esta directiva indica al servidor que debe entregar una versión actualizada del recurso.This directive instructs the server to deliver a fresh version of the resource.
  • Pragma: no-cache equivale a Cache-Control: no-cache.Pragma: no-cache is equivalent to Cache-Control: no-cache.

ValidadoresValidators

Cuando la memoria caché está obsoleta, los validadores de almacenamiento en caché HTTP se utilizan para comparar la versión en caché de un archivo con la versión en el servidor de origen.When the cache is stale, HTTP cache validators are used to compare the cached version of a file with the version on the origin server. Azure CDN Estándar/Premium de Verizon admite de forma predeterminada los validadores ETag y Last-Modified, mientras que Azure CDN Estándar de Microsoft y Azure CDN Estándar de Akamai solo admiten Last-Modified de forma predeterminada.Azure CDN Standard/Premium from Verizon supports both ETag and Last-Modified validators by default, while Azure CDN Standard from Microsoft and Azure CDN Standard from Akamai supports only Last-Modified by default.

ETag:ETag:

  • Azure CDN Estándar/Premium de Verizon admite de forma predeterminada ETag, mientras que Azure CDN Estándar de Microsoft y Azure CDN Estándar de Akamai no.Azure CDN Standard/Premium from Verizon supports ETag by default, while Azure CDN Standard from Microsoft and Azure CDN Standard from Akamai do not.
  • ETag define una cadena que es única para cada archivo y versión de un archivo.ETag defines a string that is unique for every file and version of a file. Por ejemplo, ETag: "17f0ddd99ed5bbe4edffdd6496d7131f".For example, ETag: "17f0ddd99ed5bbe4edffdd6496d7131f".
  • Incorporado en HTTP 1.1, es más reciente que Last-Modified.Introduced in HTTP 1.1 and is more current than Last-Modified. Resulta útil cuando es difícil determinar la fecha de última modificación.Useful when the last modified date is difficult to determine.
  • Admite tanto la validación segura como la validación débil; sin embargo, Azure CDN admite solo validación segura.Supports both strong validation and weak validation; however, Azure CDN supports only strong validation. Para la validación segura, las representaciones de dos recursos deben ser idénticas byte a byte.For strong validation, the two resource representations must be byte-for-byte identical.
  • Una memoria caché valida un archivo que usa ETag mediante el envío de un encabezado If-None-Match con uno o varios validadores ETag en la solicitud.A cache validates a file that uses ETag by sending an If-None-Match header with one or more ETag validators in the request. Por ejemplo, If-None-Match: "17f0ddd99ed5bbe4edffdd6496d7131f".For example, If-None-Match: "17f0ddd99ed5bbe4edffdd6496d7131f". Si la versión del servidor coincide con un validador ETag de la lista, envía el código de estado 304 (no modificado) en la respuesta.If the server’s version matches an ETag validator on the list, it sends status code 304 (Not Modified) in its response. Si la versión es diferente, el servidor responde con el código de estado 200 (OK) y el recurso actualizado.If the version is different, the server responds with status code 200 (OK) and the updated resource.

Last-Modified:Last-Modified:

  • Solo con Azure CDN Estándar/Premium de Verizon, se usa Last-Modified si ETag no forma parte de la respuesta HTTP.For Azure CDN Standard/Premium from Verizon only, Last-Modified is used if ETag is not part of the HTTP response.
  • Especifica la fecha y hora en la que el servidor de origen determina que se modificó por última vez el recurso.Specifies the date and time that the origin server has determined the resource was last modified. Por ejemplo, Last-Modified: Thu, 19 Oct 2017 09:28:00 GMT.For example, Last-Modified: Thu, 19 Oct 2017 09:28:00 GMT.
  • Una memoria caché valida un archivo mediante Last-Modified enviando un encabezado If-Modified-Since con una fecha y hora en la solicitud.A cache validates a file using Last-Modified by sending an If-Modified-Since header with a date and time in the request. El servidor de origen compara esa fecha con el encabezado Last-Modified del recurso más reciente.The origin server compares that date with the Last-Modified header of the latest resource. Si el recurso no se ha modificado desde la hora especificada, el servidor devuelve el código de estado 304 (no modificado) en la respuesta.If the resource has not been modified since the specified time, the server returns status code 304 (Not Modified) in its response. Si se ha modificado el recurso, el servidor devuelve el código de estado 200 (OK) y el recurso actualizado.If the resource has been modified, the server returns status code 200 (OK) and the updated resource.

Determinación de los archivos que pueden almacenarse en cachéDetermining which files can be cached

No todos los recursos se pueden almacenar en caché.Not all resources can be cached. La siguiente tabla muestra los recursos que pueden almacenarse en caché, según el tipo de respuesta HTTP.The following table shows what resources can be cached, based on the type of HTTP response. No se almacenarán en caché los recursos entregados con respuestas HTTP que no cumplen todas estas condiciones.Resources delivered with HTTP responses that don't meet all of these conditions cannot be cached. Solo con Azure CDN Premium de Verizon, puede usar el motor de reglas para personalizar algunas de estas condiciones.For Azure CDN Premium from Verizon only, you can use the rules engine to customize some of these conditions.

Azure CDN de MicrosoftAzure CDN from Microsoft Azure CDN de VerizonAzure CDN from Verizon Azure CDN de AkamaiAzure CDN from Akamai
Códigos de estado HTTPHTTP status codes 200, 203, 206, 300, 301, 410, 416200, 203, 206, 300, 301, 410, 416 200200 200, 203, 300, 301, 302, 401200, 203, 300, 301, 302, 401
Métodos HTTPHTTP methods GET, HEADGET, HEAD GETGET GETGET
Límites de tamaño de archivoFile size limits 300 GB300 GB 300 GB300 GB - Optimización de la entrega web general: 1,8 GB- General web delivery optimization: 1.8 GB
- Optimizaciones de streaming multimedia: 1,8 GB- Media streaming optimizations: 1.8 GB
- Optimización de archivos grandes: 150 GB- Large file optimization: 150 GB

Para que el almacenamiento en caché de Azure CDN Estándar de Microsoft funcione en un recurso, el servidor de origen debe admitir cualquier solicitud HTTP HEAD y GET y los valores de longitud de contenido deben ser los mismos para cualquier respuesta HTTP HEAD y GET en el recurso.For Azure CDN Standard from Microsoft caching to work on a resource, the origin server must support any HEAD and GET HTTP requests and the content-length values must be the same for any HEAD and GET HTTP responses for the asset. En una solicitud HEAD, el servidor de origen debe admitir la solicitud HEAD y debe responder con los mismos encabezados que si hubiera recibido una solicitud GET.For a HEAD request, the origin server must support the HEAD request, and must respond with the same headers as if it had received a GET request.

Comportamiento predeterminado del almacenamiento en cachéDefault caching behavior

En la tabla siguiente se describe el valor predeterminado del comportamiento del almacenamiento en caché para los productos de Azure CDN y sus optimizaciones.The following table describes the default caching behavior for the Azure CDN products and their optimizations.

Microsoft: Entrega web generalMicrosoft: General web delivery Verizon: Entrega web generalVerizon: General web delivery Verizon: DSAVerizon: DSA Akamai: Entrega web generalAkamai: General web delivery Akamai: DSAAkamai: DSA Akamai: Descarga de archivos de gran tamañoAkamai: Large file download Akamai: streaming multimedia general o de vídeo bajo demandaAkamai: general or VOD media streaming
Respetar origenHonor origin Yes Yes NoNo Yes NoNo Yes Yes
Duración de la caché de la red CDNCDN cache duration 2 días2 days 7 días7 days NoneNone 7 días7 days NoneNone 1 día1 day 1 año1 year

Respetar origen: especifica si se respetan los encabezados de la directiva de caché admitidos, en caso de que existan en la respuesta HTTP del servidor de origen.Honor origin: Specifies whether to honor the supported cache-directive headers if they exist in the HTTP response from the origin server.

Duración de la caché de la red CDN: especifica el periodo durante el que se almacena en caché un recurso en Azure CDN.CDN cache duration: Specifies the amount of time for which a resource is cached on the Azure CDN. Sin embargo, si Respetar origen es "Sí" y la respuesta HTTP del servidor de origen incluye el encabezado de la directiva de caché Expires o Cache-Control: max-age, Azure CDN usa el valor de duración especificado por el encabezado en su lugar.However, if Honor origin is Yes and the HTTP response from the origin server includes the cache-directive header Expires or Cache-Control: max-age, Azure CDN uses the duration value specified by the header instead.

Pasos siguientesNext steps