Audio TTS no reproducible en Android corporativo (Cloudflare challenge sobre /wp-content/uploads/) #14

Open
opened 2026-06-28 19:12:50 +00:00 by rafa · 0 comments
Owner

Labels: area:infra, bug:important

Síntoma

Un usuario no puede pulsar/reproducir el audio TTS en un móvil Android corporativo. Pendiente confirmar hoy si afecta a más gente o solo a dispositivos corporativos (MDM).

Investigación (2026-06-17)

  • Local: el MP3 se sirve bien — Content-Type: audio/mpeg, Accept-Ranges: bytes, 200. OK.
  • Prod: TODO /wp-content/uploads/ está tras un challenge de Cloudflare:
    • GET /wp-content/uploads/tts/45018.mp3HTTP 403 con cf-mitigated: challenge (igual con UA desktop y Android).
    • GET /wp-content/uploads/avatares/autores/autor-383.png403 también.
  • Funciona para la mayoría porque el navegador, al cargar la página HTML, resuelve el challenge JS y guarda la cookie cf_clearance, que reusa en las subpeticiones (imágenes, audio).
  • Hipótesis principal: en WebView / navegador corporativo (MDM/proxy que reescribe peticiones o aísla cookies), la cookie cf_clearance no viaja con la petición del <audio> (agravado por las Range requests preload), → el media da 403 → el control no reproduce y "no deja pulsarlo".

Acción recomendada (requiere panel Cloudflare de Rafa)

  • Añadir una Configuration Rule / WAF skip para */wp-content/uploads/*: saltar Managed Challenge / Bot Fight Mode y cachear como asset estático. Los uploads son públicos y NO deben ir tras challenge. Esto arregla de raíz audio + avatares + todas las imágenes en cualquier cliente.
  • Alternativa: sub-dominio/zona sin challenge para /uploads.

Hipótesis secundarias (a descartar)

  • WebView/MDM corporativo que bloquea reproducción de media nativo (no arreglable desde el sitio).
  • Layout móvil: el player va dentro del grupo flex del autor (nowrap); en viewport estrecho podría quedar comprimido. Mejora opcional: permitir wrap del grupo en móvil (.wp-block-group:has(>.wp-block-avatar){flex-wrap:wrap}) para que el control baje a su línea. Aplicar solo si se confirma que falla en móviles normales.

Relacionado

#76 (audio TTS). El challenge de Cloudflare sobre /uploads también afectaba a los avatares (#81), que se ven solo gracias a la cookie cf_clearance.

**Labels:** area:infra, bug:important ## Síntoma Un usuario no puede **pulsar/reproducir** el audio TTS en un **móvil Android corporativo**. Pendiente confirmar hoy si afecta a más gente o solo a dispositivos corporativos (MDM). ## Investigación (2026-06-17) - **Local**: el MP3 se sirve bien — `Content-Type: audio/mpeg`, `Accept-Ranges: bytes`, 200. OK. - **Prod**: TODO `/wp-content/uploads/` está tras un challenge de Cloudflare: - `GET /wp-content/uploads/tts/45018.mp3` → **HTTP 403** con `cf-mitigated: challenge` (igual con UA desktop y Android). - `GET /wp-content/uploads/avatares/autores/autor-383.png` → **403** también. - Funciona para la mayoría porque el navegador, al cargar la página HTML, **resuelve el challenge JS y guarda la cookie `cf_clearance`**, que reusa en las subpeticiones (imágenes, audio). - **Hipótesis principal**: en WebView / navegador corporativo (MDM/proxy que reescribe peticiones o aísla cookies), la cookie `cf_clearance` **no viaja con la petición del `<audio>`** (agravado por las Range requests `preload`), → el media da 403 → el control no reproduce y "no deja pulsarlo". ## Acción recomendada (requiere panel Cloudflare de Rafa) - Añadir una **Configuration Rule / WAF skip** para `*/wp-content/uploads/*`: **saltar Managed Challenge / Bot Fight Mode** y cachear como asset estático. Los uploads son públicos y NO deben ir tras challenge. Esto arregla de raíz audio + avatares + todas las imágenes en cualquier cliente. - Alternativa: sub-dominio/zona sin challenge para `/uploads`. ## Hipótesis secundarias (a descartar) - WebView/MDM corporativo que bloquea reproducción de media nativo (no arreglable desde el sitio). - Layout móvil: el player va dentro del grupo flex del autor (`nowrap`); en viewport estrecho podría quedar comprimido. Mejora opcional: permitir wrap del grupo en móvil (`.wp-block-group:has(>.wp-block-avatar){flex-wrap:wrap}`) para que el control baje a su línea. Aplicar solo si se confirma que falla en móviles normales. ## Relacionado #76 (audio TTS). El challenge de Cloudflare sobre /uploads también afectaba a los avatares (#81), que se ven solo gracias a la cookie cf_clearance.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rafa/feadulta#14