Entrega contenido inactivo

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

Entrega contenido inactivo mientras se vuelve a validar

Console

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

    Ir a Balanceo de cargas

  2. Haz clic en el nombre de tu balanceador de cargas de aplicaciones externo.
  3. Haz clic en Editar.
  4. En Configuración de backend, selecciona un backend y, luego, 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 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
  8. Haz clic en Actualizar.
  9. 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

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

    Ir a Balanceo de cargas

  2. Haz clic en el nombre de tu balanceador de cargas de aplicaciones externo.
  3. Haz clic en Editar.
  4. En Configuración de backend, selecciona un backend y, luego, haz clic en Editar
  5. Asegúrate de que la opción Habilitar Cloud CDN no esté seleccionada.
  6. En la parte inferior de la ventana, haz clic en Configuración avanzada.
  7. En Opciones adicionales de CDN > Publicar mientras está inactiva, selecciona Inhabilita la publicación mientras está inactiva.
  8. Haz clic en Actualizar.
  9. 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
}