En esta página, se proporciona información sobre cómo entregar contenido inactivo y vencido con Cloud CDN. La entrega de contenido inactivo permite que la caché global de Google continúe entregando contenido cuando el servidor de origen es inaccesible o muestre errores a Cloud CDN.
Estos son algunos de los motivos por los que deberías hacerlo:
- Si prefieres entregar contenido inactivo a los usuarios en lugar de mostrarles errores a los usuarios.
- La entrega de contenido inactivo evita la latencia cuando la caché recibe una solicitud de contenido que acaba de vencer. En lugar de tener que esperar una revalidación síncrona para el backend, la caché entrega el contenido inactivo que acaba de vencer, mientras activa una revalidación independiente.
Para habilitar este comportamiento, tu backend puede especificar la directiva stale-while-revalidate
en el encabezado de respuesta Cache-Control
. Luego, Cloud CDN entregará ese contenido desde la caché (si está disponible) durante la cantidad especificada de segundos después de la hora de vencimiento de la entrada de caché. De forma asíncrona, Cloud CDN volverá a validar el contenido con el origen.
Cloud CDN habilita esto por ti con la configuración cdnPolicy.serveWhileStale
. Esta configuración indica el tiempo que Cloud CDN puede seguir entregando a una versión inactiva después de que la respuesta haya vencido. Si no se especifica lo contrario en la respuesta, es 86400s
(1 día).
Cloud CDN no admite la directiva stale-if-error
. Esta directiva le indica a la caché que evite entregar contenido inactivo, a menos que la revalidación síncrona con el backend haya fallado con códigos de estado de error particulares.
Los valores predeterminados, mínimos y máximos son los siguientes:
- Predeterminado: 86,400 segundos (un día)
- Mínimo: 0 segundos (se inhabilita la función)
- Máximo: 604,800 segundos (una semana)
El contenido inactivo se entrega hasta el límite especificado después del vencimiento de la entrada de caché, que se define mediante los encabezados max-age
, s-maxage
o Expires
. Para obtener más información, consulta los horarios de vencimiento y las solicitudes de validación.
Si una caché perimetral de Cloud CDN no tiene una copia almacenada en caché del objeto para entregar contenido inactivo o si el objeto alcanzó el TTL máximo inactivo, Cloud CDN vuelve a validar de forma síncrona el contenido con el origen. Si el origen muestra un error en ese momento, Cloud CDN muestra el error de origen.
Logging y usuario-agente
Las solicitudes asíncronas que realiza Cloud CDN aparecen para el servidor de origen exactamente como las solicitudes de revalidación normales que se producen cuando no se entrega contenido inactivo. La excepción es que están etiquetadas con un encabezado User-Agent
que contiene Cloud-CDN-Google
.
Las solicitudes asíncronas también se registran por separado en Cloud Logging, por lo que una solicitud de usuario que se entrega inactiva genera dos entradas de registro: la primera para el contenido que en realidad se entrega al usuario y la segunda para la solicitud de revalidación al origen. Al igual que las revalidaciones síncronas, Cloud CDN puede enviar una solicitud condicional en algunas circunstancias o solo volver a solicitar el contenido de forma incondicional. En cualquier caso, el código de respuesta registrado en Cloud Logging corresponde a la solicitud original a Cloud CDN; por ejemplo, una 200 OK
para una solicitud incondicional o un 304 Not Modified
si la respuesta original del usuario fue condicional.
Directiva de solicitud de cliente max-stale
Los clientes pueden solicitar un tiempo de servicio inactivo más corto si especifican una directiva de control de caché max-stale
. Si se especifica, esta directiva controla la cantidad de inactividad que el cliente tolera.
Si el contenido almacenado en caché está más inactivo que el valor max-stale
del cliente, Cloud CDN vuelve a validar el contenido antes de entregar.
El cliente no puede solicitar un valor max-stale
mayor que el valor configurado con la opción de configuración serve-while-stale
y la directiva de control de caché stale-while-revalidate
desde el origen.
Antes de comenzar
Lee sobre los modos de almacenamiento en caché y el contenido estático.
Asegúrate de que Cloud CDN esté habilitado. Para obtener instrucciones, consulta Usa Cloud CDN.
Si es necesario, actualiza a la última versión de Google Cloud CLI:
gcloud components update
Entrega contenido inactivo mientras se vuelve a validar
Console
- En la consola de Google Cloud, ve a la página Balanceo de cargas.
- Haz clic en el nombre de tu balanceador de cargas de aplicaciones externo.
- Haz clic en Editar.
- En Configuración de backend, selecciona un backend y, luego, haz clic en Editar
- Asegúrate de que la opción Habilitar Cloud CDN esté seleccionada.
- En la parte inferior de la ventana, haz clic en Configuración avanzada.
- En Opciones adicionales de CDN, selecciona una de las siguientes opciones.
Para Entrega mientras está inactiva:
- 1 minuto
- 5 minutos
- 10 minutos
- 30 minutos
- 1 día (recomendado)
- 7 días
- Haz clic en Actualizar.
- Vuelve a hacer clic en Actualizar.
gcloud
Para los buckets de backend, usa el comando gcloud compute backend-buckets
create
o
el comando gcloud compute backend-buckets
update
con la marca --serve-while-stale
.
Para los servicios de backend, usa el comando gcloud compute backend-services
create
o
el comando gcloud compute backend-services
update
con la marca --serve-while-stale
.
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME --serve-while-stale=SECONDS
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME --serve-while-stale=SECONDS
Por ejemplo:
gcloud compute backend-services update my-backend-service --serve-while-stale=180s
API
En el caso de los buckets de backend, usa la llamada a la API Method: backendBuckets.insert
o Method: backendBuckets.update
.
Para 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": { "serveWhileStale": SECONDS }
Inhabilita la entrega de contenido inactivo
Console
- En la consola de Google Cloud, ve a la página Balanceo de cargas.
- Haz clic en el nombre de tu balanceador de cargas de aplicaciones externo.
- Haz clic en Editar.
- En Configuración de backend, selecciona un backend y, luego, haz clic en Editar
- Asegúrate de que la opción Habilitar Cloud CDN no esté seleccionada.
- En la parte inferior de la ventana, haz clic en Configuración avanzada.
- En Opciones adicionales de CDN > Publicar mientras está inactiva, selecciona Inhabilita la publicación mientras está inactiva.
- Haz clic en Actualizar.
- Vuelve a hacer clic en Actualizar.
gcloud
Para buckets de backend, usa el comando gcloud compute backend-buckets
create
o gcloud compute backend-buckets
update
con el valor de marca --serve-while-stale
establecido en 0
.
Para los servicios de backend, usa el comando gcloud compute backend-services
create
o
el comando gcloud compute backend-services
update
con el valor de la marca --serve-while-stale
establecido en 0
.
gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME) --serve-while-stale=0
API
En el caso de los buckets de backend, usa la llamada a la API Method: backendBuckets.insert
o Method: backendBuckets.update
.
Para 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": { "serveWhileStale": 0 }