Usar almacenamiento en caché negativo

En esta página se proporcionan instrucciones para usar el almacenamiento en caché negativo con Cloud CDN. El almacenamiento en caché negativo te permite definir un TTL diferente para cada código de estado.

El motivo es aplicar un control detallado sobre el almacenamiento en caché en caso de errores o redirecciones habituales. De esta forma, se puede reducir la carga de tus orígenes y mejorar la experiencia del usuario final, ya que disminuye la latencia de las respuestas.

Antes de empezar

  • Consulta información sobre los modos de caché y el contenido estático.

  • Asegúrate de que Cloud CDN esté habilitado. Para obtener instrucciones, consulta el artículo Usar Cloud CDN.

  • Si es necesario, actualiza a la versión más reciente de la CLI de Google Cloud:

    gcloud components update
    

Códigos de estado y TTLs predeterminados

El almacenamiento en caché negativo se aplica a códigos de estado específicos, que se indican en la siguiente tabla.

.

Cloud CDN aplica los siguientes TTLs predeterminados a estos códigos de estado:

Código de estado Significado TTL
HTTP 300 Varias opciones 10 minutos
HTTP 301 y 308 Redirecciones permanentes 10 minutos
HTTP 302 y 307 Redirecciones temporales No se almacena en caché de forma predeterminada
HTTP 404 No se ha encontrado 120 segundos
HTTP 405 Método no encontrado 60 segundos
HTTP 410 Gone 120 segundos
HTTP 451 No disponible por motivos legales 120 segundos
HTTP 501 No implementado 60 segundos

Puedes anular estos valores predeterminados mediante el almacenamiento en caché negativo para definir un TTL de caché para el código de estado HTTP especificado.

Configurar el almacenamiento en caché negativo

El almacenamiento en caché negativo te permite configurar tu servicio para que almacene en caché tanto los errores como los éxitos. De esta forma, Cloud CDN puede proteger los orígenes de las solicitudes que generan errores (como el error 404 Not Found) de la misma forma que protege los orígenes de las solicitudes que generan respuestas correctas.

Consola

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

    Ir a la página Balanceo de carga

  2. Haga clic en el nombre de su balanceador de carga de aplicaciones 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 Configuraciones avanzadas.
  7. Haz clic en Habilitar almacenamiento en caché negativo.
  8. Haga clic en Añadir política de almacenamiento en caché negativo.
    1. Introduce un código de estado HTTP.
    2. Selecciona un Tiempo de vida en la caché.
  9. Haz clic en Actualizar.
  10. Vuelve a hacer clic en Actualizar.

gcloud

En el caso de los segmentos de backend, usa el comando gcloud compute backend-buckets create o gcloud compute backend-buckets update con la marca --negative-caching.

En el caso de los servicios de backend, usa el comando gcloud compute backend-services create o gcloud compute backend-services update con la marca --negative-caching.

gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --negative-caching
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --negative-caching

Para habilitar el almacenamiento en caché negativo de solo dos respuestas de error específicas, por ejemplo, define que las respuestas con el código de estado 404 se almacenen en caché durante 60 segundos y que las respuestas con el código de estado 405 se almacenen en caché durante 120 segundos.

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --negative-caching \
    --cache-mode=CACHE_ALL_STATIC \
    --default-ttl=86400 \
    --negative-caching-policy='404=60,405=120'

api

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

En el caso de 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

Añade el siguiente fragmento al cuerpo de la solicitud JSON:

"cdnPolicy": {
  "negativeCaching": ON,
  "negativeCachingPolicy": [
    {
      "code": STATUS_CODE,
      "ttl": TTL_SECONDS
    }
  ]
}

El almacenamiento en caché negativo debe estar habilitado para configurar los negativeCachingPolicy ajustes. Si omite la política y tiene habilitada la opción negativeCaching, Cloud CDN usará los valores predeterminados que se indican en Códigos de estado y TTLs predeterminados.

Cuando especifique una política de almacenamiento en caché negativa, asegúrese de especificar un TTL de caché para todos los códigos de respuesta que quiera almacenar en caché. Cloud CDN no aplica ningún almacenamiento en caché negativo predeterminado cuando existe una política.

En el caso de STATUS_CODE, puede especificar los siguientes códigos de estado HTTP:

  • 300, 301, 302, 307 y 308
  • 404, 405, 410, 421 y 451
  • 501

Para cada código de estado, puede especificar el número de segundos que se deben almacenar en caché las respuestas. Para inhabilitar el almacenamiento en caché negativo de un código de estado, exclúyelo de su política de almacenamiento en caché negativo.

El valor máximo permitido es de 1800 segundos (30 minutos). Sin embargo, es posible que los objetos a los que se accede con poca frecuencia se eliminen de la caché antes del TTL definido.

Si el modo de caché se configura como CACHE_ALL_STATIC o USE_ORIGIN_HEADERS, se aplica el almacenamiento en caché negativo a las respuestas con el código de respuesta especificado que no tienen encabezados Cache-Control ni Expires.

Si el modo de la caché está configurado como FORCE_CACHE_ALL, el almacenamiento en caché negativo anula los encabezados de almacenamiento en caché definidos por el origen y Cloud CDN almacenará en caché la respuesta durante el periodo especificado por el TTL o no la almacenará en caché si no se ha definido ningún TTL.

Además, cuando el modo de caché se define como FORCE_CACHE_ALL, Cloud CDN también modificará el max-age enviado al cliente en el encabezado Cache-Control. En concreto, si un error determinado tiene un ajuste de TTL configurado, Cloud CDN tomará el menor de ese ajuste de TTL y del ajuste de configuración client_ttl y enviará un encabezado Cache-Control: public,max-age=N con ese valor. Si un error determinado no tiene un ajuste de TTL configurado, Cloud CDN eliminará cualquier encabezado Cache-Control enviado por el origen. Cloud CDN también eliminará siempre cualquier encabezado Expires enviado por el origen.

Si un origen tiene habilitado el almacenamiento en caché negativo inicialmente, pero luego se inhabilita (ya sea manualmente o inhabilitando el almacenamiento en caché para un código de respuesta concreto), las respuestas de error almacenadas en caché se consideran válidas únicamente en función de sus encabezados Cache-Control o Expires. Por lo tanto, una vez que se inhabilita el almacenamiento en caché negativo, una respuesta que no tenga directivas de antigüedad de almacenamiento en caché en sus encabezados no se sirve desde la caché.

Cloud CDN almacena en caché las respuestas a las solicitudes GET. Para obtener más información, consulta el artículo sobre contenido almacenable en caché.

Cada entrada de la caché se identifica mediante una clave de caché.

Inhabilitar el almacenamiento en caché negativo

Consola

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

    Ir a la página Balanceo de carga

  2. Haga clic en el nombre de su balanceador de carga de aplicaciones 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 Configuraciones avanzadas.
  7. Desmarca la casilla situada junto a Habilitar almacenamiento en caché negativo.
  8. Haz clic en Actualizar.
  9. Vuelve a hacer clic en Actualizar.

gcloud

En el caso de los segmentos de backend, usa el comando gcloud compute backend-buckets create o gcloud compute backend-buckets update con la marca --no-negative-caching.

En el caso de los servicios de backend, usa el comando gcloud compute backend-services create o gcloud compute backend-services update con la marca --no-negative-caching.

gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME)
    --no-negative-caching

api

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

En el caso de 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

Añade el siguiente fragmento al cuerpo de la solicitud JSON:

"cdnPolicy": {
  "negativeCaching": OFF
}