Descripción general del almacenamiento en caché

Una respuesta almacenable en caché es una respuesta HTTP que Cloud CDN puede almacenar y recuperar rápido, lo que permite tiempos de carga más rápidos. No todas las respuestas HTTP pueden almacenarse en caché.

Modos de almacenamiento en caché

Con los modos de almacenamiento en caché, puedes controlar los factores que determinan si Cloud CDN almacena en caché tu contenido.

Cloud CDN ofrece tres modos de almacenamiento en caché, que definen cómo las respuestas se almacenan en caché, si Cloud CDN respeta las directivas de caché que envió el origen y cómo se aplican los TTL de caché.

Los modos de almacenamiento en caché disponibles se muestran en la siguiente tabla:

Modo de almacenamiento en caché Comportamiento
CACHE_ALL_STATIC Almacena en caché de forma automática el contenido estático que no tiene la directiva no-store o private. Las respuestas de origen que establecen directivas de almacenamiento en caché válidas también se almacenan en caché.

Este es el comportamiento predeterminado para los backends habilitados para Cloud CDN que se crean mediante la herramienta de línea de comandos de gcloud o la API de REST.

USE_ORIGIN_HEADERS Requiere respuestas de origen para establecer directivas de caché válidas y encabezados de almacenamiento en caché válidos. Las respuestas sin estas directivas se reenvían desde el origen.
FORCE_CACHE_ALL Se almacenan en caché las respuestas correctas de forma incondicional y se anulan las directivas de caché que estableció el origen. Este modo no es apropiado si el backend entrega contenido privado por usuario, como respuestas de la API o HTML dinámico.

Para obtener instrucciones de configuración, consulta Configura el modo de almacenamiento en caché.

Contenido estático

El contenido estático es siempre el mismo, incluso cuando acceden usuarios diferentes. El CSS que usas a fin de diseñar tu sitio y JavaScript, para proporcionar interactividad, video y contenido de imagen, no suelen cambiar para cada usuario de una URL determinada (clave de caché), de modo que se benefician de almacenarse en caché en la red perimetral global de Cloud CDN.

Cuando configuras el modo de caché como CACHE_ALL_STATIC, Cloud CDNautomáticamente almacena las respuestas en caché para lo siguiente:

  • Elementos web, como CSS (text/css), JavaScript (application/javascript), y todas las fuentes web, incluido WOFF2 (font/woff2)
  • Imágenes, incluidos JPEG (image/jpg) y PNG (image/png)
  • Videos, como H.264, H.265 y MP4 (video/mp4) +. Archivos de audio, incluidos MP3 (image/mpeg) y MP4 (audio/mp4)
  • Documentos con formato, incluido PDF (application/pdf)

En la siguiente tabla, se proporciona un resumen.

Categoría Tipos de MIME
Elementos web text/css text/ecmascript text/javascript application/javascript
Fuentes Cualquier Content-Type que coincida con font/*
Imágenes Cualquier Content-Type que coincida con image/*
Videos Cualquier Content-Type que coincida con video/*
Audio Cualquier Content-Type que coincida con audio/*
Tipos de documentos con formato application/pdf y application/postscript

Cloud CDN inspecciona el encabezado de respuesta HTTP Content-Type, que refleja el tipo de MIME del contenido que se entrega.

Ten en cuenta lo siguiente:

  • El software del servidor web de origen debe configurar el Content-Type para cada respuesta. Muchos servidores web configuran de forma automática el encabezado Content-Type, incluidos NGINX, Varnish y Apache.

  • Cloud Storage configura el encabezado Content-Type de forma automática en la carga cuando usas Cloud Console o la herramienta de gsutil para subir contenido.

  • Si una respuesta se puede almacenar en caché según su tipo de MIME, pero tiene un encabezado de respuesta Cache-Control de private o no-store, o un encabezado Set-Cookie (consulta la lista completa de reglas), no está almacenada en caché.

Cloud CDN no usa extensiones de archivo en la ruta de URL para determinar si una respuesta se puede almacenar en caché, ya que muchas respuestas válidas que se pueden almacenar en caché no se reflejan en las URL.

Si deseas almacenar en caché tipos de contenido text/html y application/json, debes configurar encabezados Cache-Control explícitos en la respuesta, con cuidado de no almacenar en caché los datos de un usuario y entregarlos a todos los usuarios de manera accidental.

Contenido que se puede almacenar en caché

Cloud CDN almacena en caché las respuestas que cumplen con todos los requisitos de esta sección. El RFC 7234 especifica algunos de estos requisitos, y otros son característicos de Cloud CDN.

Cloud CDN puede cambiar periódicamente el conjunto de condiciones exacto en el que se almacena en caché el contenido. Si deseas evitar de forma explícita que Cloud CDN almacene en caché tu contenido, sigue los lineamientos de RFC 7234 para determinar cómo especificar una respuesta garantizada no almacenable en caché. Consulta también la sección Contenido que no se puede almacenar en caché según los encabezados de origen.

La implementación actual de Cloud CDN almacena las respuestas en caché si se cumplen todas las condiciones que figuran a continuación:

Atributo Requisito
Entregado por Servicio de backend, bucket de backend o un backend externo con Cloud CDN habilitado
En respuesta a Solicitud GET
Código de estado

200, 203, 204, 206, 300, 301, 302, 307, 308, 404, 405, 410, 421, 451 o 501.

Actualidad

La respuesta tiene un encabezado Cache-Control con una directiva max-age o s-maxage, o un encabezado Expires con una marca de tiempo en el futuro.

Con el modo de almacenamiento en caché CACHE_ALL_STATIC, y si no hay directivas de actualización, una respuesta correcta con tipo de contenido estático aún es apta para el almacenamiento en caché.

Con el modo de almacenamiento en caché FORCE_CACHE_ALL, cualquier respuesta correcta es apta para el almacenamiento en caché.

Si el almacenamiento en caché negativo está habilitado y el código de estado coincide con uno para el que este almacenamiento especifica un TTL, la respuesta es apta para el almacenamiento en caché, incluso sin directivas de actualización explícitas.

Contenido

Contiene un encabezado Content-Length, Content-Range o Transfer-Encoding: chunked válido.

Por ejemplo, un encabezado Content-Length que coincida de forma correcta con el tamaño de la respuesta.

Tamaño Menor o igual que el tamaño máximo.

Para las respuestas con tamaños entre 10 MB y 5 TB, consulta las restricciones adicionales de capacidad de almacenamiento en caché que se describen en las solicitudes de rango de bytes.

Para los buckets de backend de Cloud Storage, se incluyen varias formas de satisfacer estos requisitos a continuación:

De manera predeterminada, Cloud Storage asigna un encabezado Cache-Control: public, max-age=3600 al objeto cuando todo el bucket es público o los objetos individuales son públicos y los objetos individuales no especifican metadatos Cache-Control. Puedes configurar diferentes valores mediante los metadatos Cache-Control.

Para ver un ejemplo que muestra cómo configurar un balanceador de cargas de HTTP(S) externo con un bucket de backend, consulta Configura Cloud CDN con un bucket de backend.

Tamaño máximo

Cloud CDN aplica un tamaño máximo para cada respuesta. Toda respuesta que tenga un cuerpo mayor que el tamaño máximo no se almacenará en la memoria caché, pero se entregará al cliente.

El tamaño máximo varía en función de si el servidor de origen admite solicitudes de rango de bytes.

El servidor de origen es compatible con solicitudes de rango de bytes El servidor de origen no es compatible con solicitudes de rango de bytes
5 TB (5,497,558,138,880 bytes) 10 MB (10,485,760 bytes)

Casi todos los servidores web modernos (incluidos NGINX, Apache y Varnish) admiten solicitudes de rango de bytes.

Contenido que no se puede almacenar en caché según los encabezados de origen

Hay controles que bloquean el almacenamiento en caché de las respuestas. Es posible que Cloud CDN cambie periódicamente el conjunto exacto de condiciones en las que almacena en caché el contenido, por lo que, si deseas evitar que Cloud CDN almacene de forma explícita el contenido en caché, sigue los lineamientos del estándar (RFC 7234) a fin de determinar cómo especificar una respuesta garantizada no almacenable en caché.

La implementación actual de Cloud CDN no almacena en caché una respuesta si no cumple con los requisitos para contenido que se puede almacenar en caché, o si se cumplen algunas de las siguientes condiciones:

Atributo Requisito
Entregado por Servicio de backend o backend externo que no tiene habilitado Cloud CDN
Cookie Tiene un encabezado Set-Cookie
Encabezado Vary Tiene un valor distinto de Accept, Accept-Encoding o Origin.
Directiva de respuesta La respuesta tiene un encabezado Cache-Control con la directiva no-store o private (a menos que se use el modo de almacenamiento en caché FORCE_CACHE_ALL, en cuyo caso se ignorará el encabezado Cache-Control).
Directiva de solicitud La solicitud tiene una directiva Cache-Control: no-store
Solicitar autorización La solicitud tiene un encabezado Authorization, a menos que la respuesta Cache-Control lo anule.
Tamaño Más grande que el tamaño máximo

Si Cache-Control: no-store o private están presentes, pero el contenido todavía se almacena en caché, se debe a uno de los siguientes motivos:

  • Se configuró la firma de URL.
  • El modo de almacenamiento en caché de Cloud CDN se configuró para forzar el almacenamiento en caché de todas las respuestas.

Evita almacenar en caché

Para evitar que la información privada se almacene en la memoria caché de Cloud CDN, haz lo que se detalla a continuación:

  1. Asegúrate de que el modo de almacenamiento en caché de Cloud CDN no esté configurado en el modo FORCE_CACHE_ALL, que almacena en caché todas las respuestas correctas sin excepción.
  2. Incluye un encabezado Cache-Control: private en las respuestas que no deben almacenarse en cachés de Cloud CDN o un encabezado Cache-Control: no-store en las respuestas que no deben almacenarse en ninguna caché, ni siquiera en la caché de un navegador web.
  3. No firmes URL que proporcionen acceso a información privada. Cuando se accede al contenido mediante una URL firmada, puede ser apto para el almacenamiento en caché, sin importar las directivas Cache-Control en la respuesta.
  4. Para las solicitudes de origen (llenado de caché) que incluyen el encabezado de la solicitud Authorization, Cloud CDN solo almacena en caché las respuestas que incluyen la directiva de control de caché public, must-revalidate o s-maxage cuando el modo de caché está configurado en USE_ORIGIN_HEADERS o CACHE_ALL_STATIC. Esto evita el almacenamiento en caché accidental o el contenido por usuario que requiere autenticación. El modo de caché FORCE_CACHE_ALL no tiene esta restricción.

Agrega encabezados de respuesta personalizados

Con los encabezados de respuesta personalizados, puedes especificar encabezados que el balanceador de cargas de HTTP(S) externo agregue a respuestas que se envían mediante proxy. Los encabezados de respuesta personalizados te permiten reflejar el estado de la caché para tus clientes, los datos geográficos del cliente y tus propios encabezados de respuesta estática.

Para obtener la lista de encabezados, consulta Variables que pueden aparecer en el valor del encabezado.

Para obtener instrucciones, consulta Trabaja con encabezados de respuesta personalizados.

Claves de caché

Cada entrada de caché en una memoria caché de Cloud CDN se identifica a través de una clave de caché. Cuando una solicitud ingresa a la caché, la memoria caché convierte el URI de la solicitud en una clave de caché y, luego, la compara con las claves de las entradas almacenadas en caché. Si encuentra una coincidencia, la caché muestra el objeto asociado con esa clave.

De forma predeterminada, Cloud CDN usa el URI de solicitud completo como la clave de caché para los servicios de backend. Por ejemplo, https://example.com/images/cat.jpg es el URI completo de una solicitud específica para el objeto cat.jpg. Esta string se usa como la clave de caché predeterminada. Solo coinciden las solicitudes que poseen esta string exacta. Las solicitudes de http://example.com/images/cat.jpg o https://example.com/images/cat.jpg?user=user1 no coinciden.

Puedes cambiar qué partes del URI se usan en la clave de caché. Si bien el nombre de archivo y la ruta de acceso siempre deben formar parte de la clave, puedes incluir, o bien omitir, cualquier combinación de protocolo, host o cadena de consulta cuando personalices la clave de caché. En Usa claves de caché se describe cómo personalizar las claves de caché.

Parte del URI Personalización URL de ejemplo que tienen la misma clave de caché
Protocolo Omite el protocolo desde la clave de caché.
  • https://example.com/images/cat.jpg
  • http://example.com/images/cat.jpg
Host Omite el host de la clave de caché.
  • https://example.com/images/cat.jpg
  • https://example2.com/images/cat.jpg
String de consulta

Omite la string de consulta en la clave de caché.

Omite o incluye partes de la string de consulta de manera selectiva.

  • https://example.com/images/cat.jpg?user=user1
  • https://example.com/images/cat.jpg?user=user2

Además de omitir o incluir toda la string de consulta, puedes usar partes de esa string mediante el uso de listas de inclusiones y exclusiones.

En los buckets de backend, la clave de caché consiste en el URI sin el protocolo, el host ni la string de consulta.

Por lo tanto, para un bucket de backend determinado, los siguientes URI se resuelven en el mismo objeto almacenado en caché:

  • http://example.com/images/cat.jpg
  • https://example.com/images/cat.jpg
  • https://example.com/images/cat.jpg?user=user1
  • http://example.com/images/cat.jpg?user=user1
  • https://example.com/images/cat.jpg?user=user2
  • https://media.example.com/images/cat.jpg
  • https://www.example.com/images/cat.jpg

Lista de inclusiones de la string de consulta

Puedes controlar de manera selectiva qué parámetros de la string de consulta se incorporan a las claves de caché de Cloud CDN. Por ejemplo, si creas una lista de inclusiones de user, entonces https://example.com/images/cat.jpg?user=user1&color=blue crea una clave de caché de https://example.com/images/cat.jpg?user=user1 que también coincide con https://example.com/images/cat.jpg?user=user1&color=red.

Para usar esta opción, debes incluir la string de consulta, especificar una lista de inclusiones que no esté vacía y no especificar una lista de exclusiones.

Las URL con un orden diferente de los mismos parámetros de consulta dan como resultado diferentes claves de caché. Las siguientes dos URL tienen claves de caché diferentes a pesar de que tienen los mismos parámetros de consulta:

  • https://example.com/images/cat.jpg?user=user1&color=red
  • https://example.com/images/cat.jpg?color=red&user=user1

Lista de exclusiones de la string de consulta

Puedes controlar de manera selectiva qué parámetros de string de consulta se ignoran en Cloud CDN mediante el uso de una lista de exclusiones. Por ejemplo, si creas una lista de exclusiones de user, todos los parámetros de la string de consulta excepto user se usan en la clave de caché.

Con la lista de exclusiones configurada y una entrada de https://example.com/images/cat.jpg?user=user1&color=blue, Cloud CDN crea una clave de caché de https://example.com/images/cat.jpg?color=blue que también coincide con https://example.com/images/cat.jpg?user=user2&color=blue, pero no con https://example.com/images/cat.jpg?user=user1&color=red.

Para usar esta opción, debes incluir la string de consulta, especificar una lista de exclusiones que no esté vacía y no especificar una lista de inclusiones.

Directivas de control de caché

Las directivas del control de caché HTTP afectan el comportamiento de Cloud CDN, como se describe en la siguiente tabla.

N/A significa que una directiva no es aplicable a una solicitud o respuesta.

Directiva Solicitud Respuesta
no-store Cuando está presente en una solicitud, Cloud CDN lo respeta y no almacena la respuesta en la caché.

Una respuesta con no-store no se almacena en caché.

Se puede anular por backend con el modo de caché FORCE_CACHE_ALL.

no-cache La directiva de solicitud no-cache se ignora para evitar que los clientes inicien o forzar una revalidación al origen.

Una respuesta con no-cache se almacena en caché, pero se debe volver a validar con el origen antes de la entrega.

Se puede anular por backend con el modo de caché FORCE_CACHE_ALL.

public N/A

Esta directiva no es necesaria para la capacidad de almacenamiento en caché, pero se recomienda incluirla en el caso del contenido que los proxies deben almacenar en caché.

private N/A

Cloud CDN no almacena en caché una respuesta con la directiva private, incluso si la respuesta se considera almacenamiento en caché. Los clientes (como los navegadores) aún pueden almacenar en caché el resultado.

Se puede anular por backend con el modo de caché FORCE_CACHE_ALL. Usa no-store para evitar todo el almacenamiento en caché de las respuestas.

max-age=seconds Se ignora la directiva de solicitud max-age. Se muestra una respuesta en caché como si este encabezado no se incluyera en la solicitud. Una respuesta con la directiva max-age se almacena en caché hasta el seconds definido.
s-maxage=seconds N/A

Una respuesta con la directiva s-maxage se almacena en caché hasta el seconds definido.

Si max-age y s-maxage están presentes, Cloud CDN usa s‑maxage.

Las respuestas con esta directiva no se entregan inactivas.

s-max-age (dos guiones) no es válido para el almacenamiento en caché.

min-fresh=seconds Se ignora la directiva de solicitud min-fresh. Se muestra una respuesta en caché como si este encabezado no se incluyera en la solicitud. N/A
max-stale=seconds

La directiva de solicitud max-stale dicta la inactividad máxima (en segundos) que el cliente está dispuesto a aceptar.

Cloud CDN lo respeta y muestra una respuesta en caché inactiva solo si la inactividad de la respuesta es menor que la directiva max-stale. De lo contrario, se vuelve a validar antes de entregar la solicitud.

N/A
stale-while-revalidate=seconds N/A

Una respuesta con stale-while-revalidate se entrega a un cliente hasta por seconds mientras se realiza la revalidación.

Este comportamiento se puede habilitar para todas las respuestas mediante la configuración de cdnPolicy.serveWhileStale en el backend.

stale-if-error=seconds Se ignora la directiva de solicitud stale-if-error. Se muestra una respuesta en caché como si este encabezado no se incluyera en la solicitud.

Este encabezado de respuesta no tiene efecto.

must-revalidate N/A

Una respuesta con must-revalidate se vuelve a validar con el servidor de origen después de su vencimiento.

Las respuestas con esta directiva no se entregan inactivas.

proxy-revalidate

Una respuesta con proxy-revalidate se vuelve a validar con el servidor de origen después de su vencimiento.

Las respuestas con esta directiva no se entregan inactivas.

immutable N/A Sin efecto. Esto se pasa al cliente en la respuesta.
no-transform N/A Cloud CDN no aplica ninguna transformación.
only-if-cached Se ignora la directiva de solicitud only-if-cached. Se muestra una respuesta en caché como si este encabezado no se incluyera en la solicitud. N/A

Siempre que sea posible, Cloud CDN intenta lograr el cumplimiento de RFC (HTTP RFC 7234), pero prioriza la optimización para la descarga de caché y minimiza el impacto que los clientes pueden tener en el índice de hits o en la carga de origen en general.

Para las respuestas que usan el encabezado Expires HTTP/1.1:

  • El valor del encabezado Expires debe ser una fecha HTTP válida, como se define en RFC 7231.
  • Un valor de fecha en el pasado, una fecha no válida o un valor de 0 indica que el contenido ya venció y requiere revalidación.
  • Si hay un encabezado Cache-Control presente en la respuesta, Cloud CDN ignora el encabezado Expires.

La presencia de un encabezado Expires válido y futuro en la respuesta permite que la respuesta se almacene en caché y no requiere que se especifiquen otras directivas de caché.

El encabezado HTTP/1.0 Pragma, si está presente en una respuesta, se ignora y se pasa tal como está al cliente. Las solicitudes de cliente con este encabezado se pasan al origen y no afectan la forma en que Cloud CDN entrega una respuesta.

Encabezados Vary

El encabezado Vary indica que la respuesta varía según los encabezados de la solicitud del cliente. Además del URI de solicitud, Cloud CDN respeta los encabezados Vary que los servidores de origen incluyen en las respuestas. Por ejemplo, si una respuesta especifica Vary: Accept, Cloud CDN usa una entrada de caché para las solicitudes que especifican Accept: image/webp,image/*,*/*;q=0.8 y otra destinada a las solicitudes que especifican Accept: */*.

En la tabla de la sección Contenido que no se puede almacenar en caché, se enumeran los encabezados Vary que permiten que el contenido se almacene en caché. Otros valores de encabezado Vary impiden que el contenido se almacene en caché.

El modo de caché FORCE_CACHE_ALL no anula este comportamiento. Los encabezados Vary son importantes para evitar el envenenamiento de caché entre varias respuestas posibles del servidor de origen. Sería peligroso que FORCE_CACHE_ALL provoque que esas respuestas se almacenen en caché.

Los encabezados Vary a veces se usan cuando se entrega contenido comprimido. Cloud CDN no comprime ni descomprime las respuestas, pero puede entregar respuestas que comprima el servidor de origen. Si el servidor de origen elige entregar contenido comprimido o sin comprimir según el valor del encabezado de la solicitud Accept-Encoding, asegúrate de que la respuesta especifique Vary: Accept-Encoding.

Plazos de vencimiento y solicitudes de validación

Con el modo de almacenamiento en caché USE_ORIGIN_HEADERS, cada entrada de una caché de Cloud CDN tiene un plazo de vencimiento que definen los encabezados Cache-Control: s-maxage, Cache-Control: max-age o Expires de acuerdo con RFC 7234. Si hay más de uno, Cache-Control: s-maxage tiene prioridad sobre Cache-Control: max-age, y Cache-Control: max-age tiene prioridad sobre Expires.

Con el modo de caché CACHE_ALL_STATIC, los encabezados de origen se consultan de forma predeterminada para determinar la actualización. Si no están presentes, cualquier contenido estático se considera actualizado.

Con el modo de almacenamiento en caché FORCE_CACHE_ALL, todas las respuestas de backend se consideran actualizadas.

Cuando Cloud CDN recibe una solicitud, busca la entrada de caché correspondiente y verifica su antigüedad. Si la entrada de caché existe y está lo suficientemente actualizada, la respuesta se puede entregar desde la caché. Sin embargo, si el plazo de vencimiento ya pasó, Cloud CDN vuelve a intentar validar la entrada de caché mediante el contacto con uno de tus backends. Esto se realiza antes de entregar la respuesta, a menos que habilites serve-while-stal, en cuyo caso la revalidación se realiza de forma asíncrona.

Cloud CDN vuelve a validar los objetos almacenados en caché que tienen más de 30 días. Esto permite la invalidación y expulsión automáticas del contenido almacenado en caché generado por el usuario. Cuando un valor max-age o s-maxage supera los 30 días (2,592,000 segundos), Cloud CDN trata el valor como si fueran 2,592,000 segundos. Los clientes finales aún ven los valores exactos de max-age y s-maxage, incluso si superan los 30 días.

Cloud CDN puede intentar usar la información en los encabezados de respuesta almacenados en caché para validar la entrada de caché con el backend. Esto sucede cuando se cumple lo siguiente:

  • La respuesta almacenada en caché anterior tiene un encabezado Last-Modified o ETag.
  • La solicitud del cliente es una solicitud GET que no contiene encabezados If-Modified-Since o If-None-Match.

Cloud CDN realiza esta validación de una manera un poco diferente en función de si la respuesta se almacenó en caché mediante solicitudes de rango de bytes:

  • Si la respuesta se almacenó en caché mediante solicitudes de rango de bytes, Cloud CDN inicia una solicitud de validación separada que incluye encabezados If-Modified-Since o If-None-Match.
  • De lo contrario, Cloud CDN agrega los encabezados If-Modified-Since o If-None-Match a la solicitud del cliente y reenvía la solicitud modificada al backend.

Si la copia almacenada en caché todavía está actualizada, el backend puede validar la entrada de caché existente mediante el envío de una respuesta 304 Not Modified. En este caso, el backend solo envía los encabezados de respuesta, no el cuerpo de la respuesta. Cloud CDN inserta los nuevos encabezados de respuesta en la caché, actualiza el plazo de vencimiento y entrega los nuevos encabezados de respuesta y el cuerpo de respuesta almacenado en caché al cliente.

Si la respuesta en caché anterior no tiene un encabezado Last-ModifiedETag, Cloud CDN ignora la entrada de caché vencida y reenvía la solicitud del cliente al backend sin modificar.

El plazo de vencimiento de la entrada de caché es el límite superior en cuanto a la duración de la entrada de caché. No hay garantía de que una entrada de caché permanezca en la caché hasta que venza. Las entradas de caché para el contenido poco popular pueden expulsarse a fin de dejar lugar para el contenido nuevo. Independientemente del plazo de vencimiento especificado, las entradas de caché a las que no se accede durante 30 días se quitan automáticamente.

Para obtener más información, consulta Expulsión y vencimiento.

Configuración y anulación de TTL

Puedes definir mejor el comportamiento de Cloud CDN en relación con el tiempo que Cloud CDN espera antes de volver a validar el contenido.

Para obtener más información, consulta Usa la configuración y la anulación de TTL.

Compatibilidad con solicitudes de rango de bytes

Una respuesta que cumple con los siguientes criterios indica que el servidor de origen admite solicitudes de rango de bytes:

  • Código de estado: 200 OK o 206 Partial Content
  • Encabezado: Accept-Ranges: bytes
  • Encabezado: Content-Length o Content-Range
  • Encabezado: ETag con un validador sólido
  • Encabezado: Last-Modified

Cloud Storage admite solicitudes de rango de bytes para la mayoría de los objetos. Sin embargo, Cloud Storage no admite solicitudes de rango de bytes para objetos con metadatos Content-Encoding: gzip, a menos que la solicitud del cliente incluya un encabezado Accept- Encoding: gzip. Si tienes objetos de Cloud Storage de más de 10 MB, asegúrate de que no tengan metadatos Content-Encoding: gzip. Para obtener información sobre cómo editar metadatos de objetos, consulta Visualiza y edita metadatos de objetos.

El popular software del servidor web también admite solicitudes de rango de bytes. Consulta la documentación del software del servidor web para obtener detalles sobre cómo habilitar la compatibilidad. Para obtener más información sobre las solicitudes de rango de bytes, consulta la especificación HTTP.

Cuando un servidor de origen admite solicitudes de rango de bytes, una caché de Cloud CDN se niega a almacenar una respuesta que puede almacenarse en caché la primera vez que realiza la solicitud si se cumple alguna de las siguientes condiciones:

  • El cuerpo de la respuesta está incompleto porque el cliente solicitó solo una parte del contenido.
  • El cuerpo de la respuesta es más grande que 1 MB (1,048,576 bytes).

Cuando esto sucede y la respuesta satisface los requisitos normales de capacidad de almacenamiento en caché, la caché registra que el servidor de origen admite solicitudes de rango de bytes para esa clave de caché y reenvía la respuesta del servidor de origen al cliente.

En un error de caché, la memoria caché verifica si se sabe que el servidor de origen admite solicitudes de rango de bytes. Si se sabe que las solicitudes de rango de bytes son compatibles con la clave de caché, la caché no reenvía la solicitud del cliente al balanceador de cargas de HTTP(S) externo. En su lugar, la caché inicia sus propias solicitudes de relleno de caché de rango de bytes para las partes faltantes del contenido. Si el servidor de origen muestra el rango de bytes solicitado en una respuesta 206 Partial Content, la caché puede almacenar ese rango para solicitudes futuras.

Una caché almacena una respuesta 206 Partial Content solo cuando se recibe en respuesta a una solicitud de rango de bytes que inició la caché. Debido a que una caché no inicia una solicitud de rango de bytes a menos que haya registrado de forma previa que el servidor de origen admite solicitudes de rango de bytes, una caché determinada no almacena contenido de más de 1 MB hasta la segunda vez que se accede al contenido.

Debido a su naturaleza distribuida, es posible que Cloud CDN pueda recuperar veces el fragmento final del origen más de una vez por ubicación. Esto solo afecta las primeras solicitudes por clave de caché.

Solicitud de contraer (fusión)

La solicitud de contraer (o fusión) contrae de forma activa varias solicitudes de llenado de caché generadas por el usuario para la misma clave de caché en una sola solicitud de origen por nodo perimetral. Esto puede reducir de forma activa la carga en el origen y se aplica a las solicitudes de item (respuestas obtenidas directamente) y chunk, en la que Cloud CDN usa solicitudes Range para recuperar objetos de mayor tamaño de manera más eficiente.

La selección de solicitudes está habilitada de forma predeterminada.

Las solicitudes contraídas se comportan de la siguiente manera:

  • Las solicitudes contraídas registran la solicitud orientada al cliente y la solicitud de llenado de caché (contraída).
  • El líder de la sesión contraída se usa para realizar la solicitud de relleno de origen.
  • Los atributos de solicitud que no forman parte de la clave de caché, como el encabezado User-Agent o Accept-Encoding, solo reflejan el líder de la sesión contraída.
  • Las solicitudes que no tienen la misma clave de caché no se pueden contraer.

En el siguiente diagrama, se muestra cómo se fusionan las solicitudes:

Cloud CDN con fusión de solicitudes habilitada (haz clic para ampliar)
Cloud CDN con fusión de solicitudes habilitada (haz clic para agrandar)

En comparación, con la incorporación de solicitudes inhabilitadas o para solicitudes que no se pueden fusionar, la cantidad de solicitudes de origen y respuestas puede ser igual a la cantidad de clientes que intentan recuperar un objeto que no está almacenado en caché.

Cloud CDN sin habilitación de solicitudes fusionadas (haz clic para ampliar)
Cloud CDN sin fusión de solicitudes habilitada (haz clic para agrandar)

Para todos los tipos de solicitudes, esta opción está habilitada de forma predeterminada. Para los tipos de solicitud de elemento, puedes inhabilitar la contracción. Recomendamos inhabilitar la contracción de solicitudes de elementos en situaciones muy sensibles, como en la entrega de anuncios, en la que la carga de origen no es una consideración.

En la siguiente tabla, se resume el comportamiento y la configuración predeterminados para diferentes tipos de solicitudes.

Tipo de solicitud Comportamiento predeterminado Configurable Beneficios de la contracción
Solicitudes de fragmento Habilitado No Puede reducir significativamente el ancho de banda de origen.
Solicitudes de elementos Habilitado Puede reducir el volumen de solicitudes de origen.

A fin de inhabilitar la fusión de solicitudes de elementos con el SDK de Cloud en un bucket de backend que hace referencia a un bucket de Cloud Storage, sigue estos pasos:

gcloud

Usa el comando gcloud compute backend-services o backend-buckets:

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --no-request-coalescing

Para habilitar la fusión de solicitudes de elementos en un bucket de backend con el SDK de Cloud, sigue estos pasos:

gcloud

Usa el comando gcloud compute backend-buckets:

gcloud compute backend-buckets update BACKEND_BUCKET_NAME \
    --request-coalescing

Si quieres habilitar la fusión de solicitudes de elementos con el SDK de Cloud para un servicio de backend, incluidos los grupos de VM y los backends externos, haz lo siguiente:

gcloud

Usa el comando gcloud compute backend-services:

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --request-coalescing

Solicitudes que inicia Cloud CDN

Cuando el servidor de origen admite solicitudes de rango de bytes, Cloud CDN puede enviar varias solicitudes al servidor de origen en respuesta a una sola solicitud del cliente. Cloud CDN puede iniciar dos tipos de solicitudes: solicitudes de validación y solicitudes de rango de bytes.

Si la respuesta que indicó que el servidor de origen admite solicitudes de rango de bytes para una clave de caché específica caducó, Cloud CDN inicia una solicitud de validación a fin de confirmar que el contenido no cambió y que el servidor de origen aún admite solicitudes de rango en el contenido. Si el servidor de origen responde con una respuesta 304 Not Modified, Cloud CDN procede a entregar el contenido mediante rangos de bytes. De lo contrario, Cloud CDN reenvía la respuesta del servidor de origen al cliente. Puedes controlar los plazos de vencimiento mediante los encabezados de respuesta Cache-Control y Expires.

En un error de caché, Cloud CDN inicia las solicitudes de llenado de caché para un conjunto de rangos de bytes que se superponen sobre la solicitud de cliente. Si algunos rangos del contenido que solicitó el cliente están presentes en la memoria caché, Cloud CDN entrega lo que puede desde la memoria caché y envía solicitudes de rango de bytes para los rangos faltantes al servidor de origen.

En cada solicitud de rango de bytes que inicia Cloud CDN, se especifica un rango que comienza en un desplazamiento que es múltiplo de 2,097,136 bytes. Con la excepción posible del rango final, cada rango también es de 2,097,136 bytes. Si el contenido no es un múltiplo de ese tamaño, el rango final es más pequeño. Es posible que el tamaño y los desplazamientos en las solicitudes de rango de bytes cambien en el futuro.

Por ejemplo, considera una solicitud de cliente para los bytes 1,000,000 a 3,999,999 de contenido que no esté presente en la caché. En este ejemplo, Cloud CDN podría iniciar dos solicitudes GET, una para los primeros 2,097,136 bytes de contenido y otra para los segundos 2,097,136 bytes. Esto se traduce en 4,194,272 bytes de llenado de caché, aunque el cliente solicitó solo 3,000,000 bytes.

Cuando usas un bucket de Cloud Storage como origen, cada solicitud GET se factura como una operación Clase B independiente. Se te cobrará por todas las solicitudes GET que procesa Cloud Storage, lo que incluye cualquier solicitud que inicie Cloud CDN. Cuando una respuesta se entrega por completo desde una caché de Cloud CDN, no se envían solicitudes GET a Cloud Storage y no se cobra por ninguna operación de Cloud Storage.

Cuando Cloud CDN inicia una solicitud de validación o una solicitud de rango de bytes, no incluye encabezados específicos del cliente, como Cookie o User-Agent.

En el campo httpRequest.userAgent de Cloud Logging, Cloud-CDN-Google significa que Cloud CDN inició la solicitud.

Omite la caché

La omisión de la caché permite que las solicitudes que contengan encabezados de la solicitud específicos omitan la caché, incluso si el contenido se almacenó en caché con anterioridad.

En esta sección, se proporciona información para omitir la caché con encabezados HTTP, como Pragma y Authorization. Esta función es útil cuando deseas asegurarte de que tus usuarios o clientes siempre tengan el contenido más reciente recuperado del servidor de origen. Se recomienda usar esta información para hacer pruebas, configurar directorios de etapa de pruebas o secuencias de comandos.

Si un encabezado especificado coincide, la caché se omite para todas las opciones de configuración del modo de caché, incluso FORCE_CACHE_ALL. La caché omite los resultados en una gran cantidad de errores de caché si los encabezados especificados son comunes a muchas solicitudes.

Antes de comenzar

  • Asegúrate de que Cloud CDN esté habilitado. Para obtener instrucciones, consulta Usa Cloud CDN.

  • Si es necesario, actualiza a la última versión del SDK de Cloud:

    gcloud components update
    

Configura la omisión de la caché

Puedes especificar hasta cinco nombres de encabezado HTTP. Los valores no distinguen entre mayúsculas y minúsculas. El nombre del encabezado debe ser un token de campo de encabezado HTTP válido. Un nombre de encabezado no debe aparecer más de una vez en la lista de encabezados agregados. Para conocer las reglas acerca de los nombres de encabezado válidos, consulta Cómo funcionan los encabezados personalizados.

Console

  1. En Google Cloud Console, ve a la página Balanceo de cargas.

    Ir a la página Balanceo de cargas

  2. Haz clic en el nombre del balanceador de cargas de HTTP(S) externo.
  3. Haz clic en Editar .
  4. En Configuración de backend, selecciona un backend y haz clic en Editar .
  5. Asegúrate de que la opción Habilitar Cloud CDN esté seleccionada.
  6. En la parte inferior de la ventana, haz clic en Configuración avanzada.
  7. En Omitir la caché en el encabezado de la solicitud, haz clic en Agregar encabezado.
  8. Escribe un nombre de encabezado, como Pragma o Authorization.
  9. Haz clic en Actualizar.
  10. Vuelve a hacer clic en Actualizar.

gcloud

En los buckets de backend, usa el comando gcloud compute backend-buckets create o gcloud compute backend-buckets update con la marca --bypass-cache-on-request-headers.

En los servicios de backend, usa el comando gcloud compute backend-services create o gcloud compute backend-services update con la marca --bypass-cache-on-request-headers.

gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --bypass-cache-on-request-headers=BYPASS_REQUEST_HEADER
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --bypass-cache-on-request-headers=BYPASS_REQUEST_HEADER

Por ejemplo:

gcloud compute backend-services update my-backend-service
    --bypass-cache-on-request-headers=Pragma
    --bypass-cache-on-request-headers=Authorization

api

Para los buckets de backend, usa la llamada a la API Method: backendBuckets.insert, Method: backendBuckets.update o Method: backendBuckets.patch..

Para los servicios de backend, usa la llamada a la API método: backendServices.insert, Method: backendServices.update o Method: backendServices.patch.

Por ejemplo:

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets

Agrega el siguiente fragmento al cuerpo de solicitud JSON:

"cdnPolicy": {
  "bypassCacheOnRequestHeaders": [
    {
      "headerName": string
    }
  ]
}

Inhabilita la omisión de la caché

gcloud

En los buckets de backend, usa el comando gcloud compute backend-buckets create o gcloud compute backend-buckets update con la marca --no-bypass-cache-on-request-headers.

En los servicios de backend, usa el comando gcloud compute backend-services create o gcloud compute backend-services update con la marca --no-bypass-cache-on-request-headers.

gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME)
    --no-bypass-cache-on-request-headers

api

En los buckets de backend, usa la llamada a la API Method: backendBuckets.insert o Method: backendBuckets.update.

En los servicios de backend, usa la llamada a la API Method: backendServices.insert o Method: backendServices.update.

Usa una de las siguientes llamadas a la API:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE

Agrega el siguiente fragmento al cuerpo de solicitud JSON:

"cdnPolicy": {
  "fields": "bypassCacheOnRequestHeaders"
}

¿Qué sigue?