La clave de caché identifica un objeto en caché. Dos peticiones con la misma clave reciben la misma respuesta cacheada.
Qué forma la clave
| Parte | Cómo se normaliza |
|---|---|
| Sitio | Cada nombre con proxy es un sitio propio, así que los nombres nunca comparten objetos. |
| Host | En minúsculas, sin puerto ni punto final. |
| Ruta | Los escapes %XX en mayúsculas, los escapes de caracteres no reservados decodificados y los segmentos . y .. resueltos. // se conserva y los caracteres reservados se quedan como llegan (%2F y / son distintos). Al origen se le envía la misma ruta. |
| Cadena de consulta | Según el nivel de caché. |
| Variante | Solo si el origen envía un Vary admitido. |
Las cookies, la cabecera Authorization y las cookies del reto y de la puerta de acceso de OpenWAF nunca entran en la clave. Las claves de más de 4 KB no se cachean.
Cambiar los ajustes de consulta de un sitio o de sus reglas cambia sus claves, lo que equivale a purgar ese sitio.
Cadena de consulta
cache.query.mode, que en el panel se llama Nivel de caché, decide qué parte de la cadena de consulta entra en la clave:
| Modo | Panel | Clave |
|---|---|---|
all (por defecto) | Estándar: la cadena de consulta entera | La consulta entera, tal como llega. ?v=1 y ?v=2 son objetos distintos. |
ignore | Ignorar la cadena de consulta (ficheros estáticos) | Sin consulta, pero solo en las extensiones estáticas por defecto. Las rutas que hace elegibles una regla conservan su consulta. |
none | Sin cadena de consulta: solo se cachean las peticiones sin ella | Las peticiones con consulta no se cachean (DYNAMIC). |
include | Solo estos parámetros | Solo los parámetros de cache.query.params. |
exclude | Todos los parámetros salvo estos | Todos los parámetros salvo los de cache.query.params, por ejemplo utm_*, fbclid, gclid. |
Un * final en params casa por prefijo. Con cache.query.sort a true, los parámetros se ordenan, así que ?b=1&a=2 y ?a=2&b=1 comparten objeto. Una regla de caché puede fijar su propia política de consulta para las peticiones que casan con ella.
Vary
El borde guarda como mucho una variante por valor de las cabeceras Vary admitidas:
Cabecera Vary | Tratamiento |
|---|---|
Accept-Encoding | No divide la caché: una sola copia, descomprimida al vuelo para los visitantes que lo necesitan. |
Accept | Solo en respuestas image/*. Se normaliza a avif, webp u other, suficiente para los optimizadores de imágenes. |
Origin | Se normaliza a esquema://host[:puerto]. También se aplica cuando la respuesta trae un Access-Control-Allow-Origin distinto de *, aunque no lleve Vary: Origin, para que nunca se sirva la respuesta CORS de un sitio a otro. |
Cualquier otra, incluidas *, Cookie y Authorization | La respuesta no se guarda (BYPASS). |
Una regla de caché puede listar cabeceras de petición en vary_bypass_if_present (por ejemplo las cabeceras RSC y Next-Router-* de Next.js). Una petición que traiga alguna se salta la caché, y un Vary del origen que las nombre deja de impedir que se guarde la versión normal. Consulta Reglas de caché.
Cabeceras que se quitan antes del origen
En las peticiones elegibles, el borde quita cabeceras que no forman parte de la clave pero que un origen podría reflejar en la página, una vía habitual de envenenamiento de caché:
X-Original-URL, X-Rewrite-URL, X-HTTP-Method-Override, X-HTTP-Method, X-Method-Override, X-Host, X-Forwarded-Scheme, X-Forwarded-Server y X-Forwarded-Port.