Pregunta

Quiero usar barniz para almacenar en caché determinadas páginas, incluso en presencia de cookies. Hay 3 posibilidades que tengo que cuidar de:

  1. Un anónimo usuario está viendo alguna página
  2. Una conectado usuario está viendo alguna página con personalización de la luz. Estas personalizaciones se almacenan en una cookie de-firmado y se rellenan de forma dinámica por JavaScript. La varían en cookies HTTP de cabecera no está establecida.
  3. Una conectado usuario está viendo alguna página con los datos personalizados de la base de datos. La varían en cookies HTTP cabecera está establecido.

Los comportamientos esperados serían:

  1. caché de la página. Este es el escenario más básico para el barniz de manejar.
  2. caché de la página y no elimine la cookie porque algo de lógica Javascript necesita.
  3. Nunca caché esta página porque varían en cookies está señalando el contenido de cookies afectará a la salida de esta página.

He leído algunos documentos sobre barniz y no puedo decir si este es el comportamiento por defecto o si hay alguna configuración que tengo que hacer en VCL para que esto ocurra.

¿Fue útil?

Solución

Sólo las sesiones son únicos para cada cliente, no necesariamente las cookies.

Lo que se quiere tenga sentido y sea posible con barniz, es sólo una cuestión de la elaboración de su propio cuidado VCL. Por favor, preste atención a las siguientes partes de la default.vcl:

sub vcl_recv {
    ...
    if (req.http.Authorization || req.http.Cookie) {
      /* Not cacheable by default */
      return (pass);
    }
}


sub vcl_hit {
    if (!obj.cacheable) {
        return (pass);
    }
    ...
}


sub vcl_fetch {
    if (!beresp.cacheable) {
        return (pass);
    }
    if (beresp.http.Set-Cookie) {
        return (pass);
    }
    ...
}

Hay que reemplazar estas piezas con su propia lógica; es decir, definir sus propias funciones vcl_. Por defecto, las peticiones (vcl_recv) y respuestas (vcl_fetch) con las cookies no son almacenables en caché. Usted sabe que su aplicación back-end mejor y se debe volver a escribir la lógica de almacenamiento en caché genérico para este caso específico. Es decir, se deben definir en el que el barniz caso no, habilite una búsqueda o entregar.

En su caso, usted tendrá páginas (casos 1 y 2) sin variar por galleta, que se almacena en caché y compartido por todo el mundo (solicitudes con / sin cookies); simplemente no les importa req.http.Cookie en vcl_recv. No me páginas de caché (caso 3) con una variar por la galleta -o al menos no durante mucho tiempo-, ya que no se pueden compartir en absoluto; hacer un 'pase' en vcl_fetch.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top