
Análisis técnico de cacheabilidad de
páginas de producto y
categoría
sobre SAP Commerce Cloud (Hybris) + Cloudflare CDN
Cache-Control: no-cache, no-store + Set-Cookie en TODAS las
páginas.Solo se pueden cachear responses de
sesiones anónimas.
Si está logado, el HTML puede contener datos personalizados.
| Cookie | Auth | Fiabilidad | Contenido |
|---|---|---|---|
acceleratorSecureGUID |
✅ | Máxima | Token anti-CSRF de sesión Hybris |
toysrusstorefrontRememberMe |
✅ | Muy alta | Email (Base64) + timestamp + hash |
JSESSIONID |
⚠️ | Insuficiente | Existe en ambos estados |
# Cloudflare expression — solo cachear anónimos NOT (http.cookie contains "acceleratorSecureGUID" OR http.cookie contains "toysrusstorefrontRememberMe")
Header: "MI CUENTA"
Header: "JULIO"
Hybris emite triple bloqueo en cada
response:
Cache-Control + Set-Cookie
+ Pragma
# ❌ Triple bloqueo Cache-Control: no-cache, no-store, max-age=0, must-revalidate Pragma: no-cache Expires: 0 # ❌ Set-Cookie en CADA response Set-Cookie: anonymous-consents=...; Set-Cookie: JSESSIONID=Y6-{uuid}; Set-Cookie: ROUTE=.accstorefront-{pod}; # ❌ Cloudflare no cachea CF-Cache-Status: DYNAMIC
no-storeSet-Cookie en paths cacheados
Vary: User-Agent
Cache-Control del origen — documentado oficialmente.
Los TTL y la estrategia de
purgado determinan cuánto tiempo puede un cliente ver contenido desactualizado.
Es una decisión de
negocio, no solo técnica.
| Tipo de página | TTL sugerido | Purgado | Justificación |
|---|---|---|---|
| Home | 5 – 15 min |
Purge on publish | Rotación frecuente de banners y promos |
| PDP (producto) | 1 – 4 h |
Purge on stock/price change | Precio y stock son los datos más sensibles |
| Grid (categoría) | 30 min – 2 h |
Purge on catalog update | Nuevo producto o cambio de orden afecta la grid |
| Estáticos (CSS/JS/img) | 30 días+ |
Versionado (hash) | Inmutables si el nombre cambia con cada deploy |
Hybris inyecta tokens CSRF en
<input hidden> dentro de
forms.
Si cacheamos: todos reciben el mismo token → acciones rotas.
add-to-cart, wishlist, pickup, notify
add-to-cart × producto, wishlist ×
prod.
96 forms en total
Endpoint AJAX en Hybris + JS que actualiza tokens
CF Worker reescribe tokens en streaming
Quitar CSRF Hybris + WAF como compensación
/ajax/csrf-token en Hybris + snippet JS client-side.
Solución más segura y mantenible.
// Snippet JS (inyectable vía Cloudflare o Hybris template) document.addEventListener('DOMContentLoaded', () => { fetch('/ajax/csrf-token', { credentials: 'include' }) .then(r => r.json()) .then(({ token }) => { document.querySelectorAll('input[name="CSRFToken"]') .forEach(el => el.value = token); }); }); // Controller Hybris (~20 líneas) @Controller public class CsrfTokenController { @GetMapping("/ajax/csrf-token") @ResponseBody public Map<String, String> getToken(HttpServletRequest req) { CsrfToken csrf = (CsrfToken) req.getAttribute("_csrf"); return Map.of("token", csrf.getToken()); } }
acceleratorSecureGUID/*/p/* (PDP) · /*/c/* (grids) · /
(home)
/checkout/* · /my-account/* ·
/login · /cart
| Fase | Acción | Responsable | Dificultad | Riesgo |
|---|---|---|---|---|
| FASE 0 | PoC Cache Rules + Strip Set-Cookie + Skip auth | Server Startup | Baja | Medio |
| FASE 1a | Endpoint CSRF /ajax/csrf-token |
Equipo Hybris | Media | Alto |
| FASE 1b | Snippet JS para refresh de tokens post-cache | Equipo Hybris | Media | Alto |
| FASE 2 | Monitoring: Cache Analytics + alertas hit ratio | Server Startup | Media | Bajo |
curl sin cookies + navegador automatizado, comparando headers y HTML
en sesiones independientes.

Análisis técnico con grabaciones de
navegador,
diffs de HTTP/HTML, y
configuración Cloudflare detallada.