Volver a la wiki

Pantalla negra al publicar cartelería en el CCIB — Cloudflare cacheaba el .svg 4h por extensión

Cuándo

16-09-2026 (v1.135.2, s329). Diagnosticado en vivo en el CCIB, mismo evento que otros incidentes de esta franja (ver relacionados).

Síntomas visibles

Al publicar un vídeo nuevo en una pantalla SpinetiX del CCIB, el reproductor seguía mostrando el proyecto anterior — pantalla negra en vez del contenido nuevo. El enlace público de cartelería (spx-listing.xml, project.svg, index.svg) devolvía contenido viejo pese a que el servidor ya servía el nuevo.

Causa raíz

Cloudflare cacheaba las respuestas .svg por extensión de archivo, durante 4 horas, sin mirar las cabeceras de caché del origen. Una regla de bypass de caché para /publish/* ya se había creado ese mismo día en Cloudflare tras un primer intento — pero no cubría el caso de .svg cacheado por su regla de extensión genérica, independiente de la ruta.

Fix aplicado

43c1603c — el enlace público de cartelería responde ahora con Cache-Control: no-store explícito en signage/views_publish.py, como segunda red además de la regla de Cloudflare. Con la cabecera de origen forzando no-cache, la regla de extensión de Cloudflare deja de tener margen para cachear aunque la ruta no esté cubierta. Test: tests/signage/test_publish_no_store.py (36 líneas).

Lecciones

Una regla de bypass de caché en Cloudflare por ruta no protege contra una regla de caché por extensión de archivo aplicada en otra capa de su configuración — hacen falta las dos redes (cabecera de origen + regla de borde) cuando el contenido debe considerarse siempre fresco.

Preventivos futuros

Cualquier endpoint público de “estado en vivo” (el heartbeat de una pantalla, el listado de reproducción) debe llevar Cache-Control: no-store en el origen, sin depender solo de reglas de Cloudflare configuradas por fuera del código.

Véase también

Subir