yon
Tuesday
13 October 2009 11:47

Artículo técnico, si no te molan estas cosas, pasa de esto
Últimamente estoy teniendo un peculiar problema en el trabajo. Tenemos un reproductor Flash que reproduce películas (flv), pero desde principios del verano hemos detectado un curioso problema que nos llevó de cabeza durante dos días.

Los ficheros de los vídeos están alojados fuera de los servidores en un sistema distribuido, los vídeos se piden por http a una dirección estática y el servidor responde con un redireccionado 302 indicando el servidor mas cercano a nuestra posición donde podemos descargar el fichero. Todo se hace de manera automática y transparente al usuario, el mensaje 302 está en el protocolo http desde sus orígenes y todo navegador sabe como seguirlo.

Por otro lado, en nuestra aplicación flash, le indicamos que consulte una dirección de nuestro servidor web, desde donde se le envía la redirección 302 con la dirección estática del servidor de vídeos (además de hacer operaciones de control estadístico o de acceso).

Y aquí está el problema, hemos detectado que el reproductor Flash cuando tiene 2 redirecciones pasa olímpicamente de seguir buscando y no descarga el fichero final, y la aplicación no funciona. Puedo entender que pretendan realizar algún tipo de medida de seguridad, pero me parece un comportamiento incontrolable además de estúpido.

¿Alguien sabe algo de esto? Un poco de búsqueda por Google no me ha aclarado nada y la única solución ha sido quitar la etapa de control. 🙁

Comentarios (7)

  1. Jadriman dice:

    Se me ocurre algo. Que en lugar de hacer una redirección en la etapa de control, hagáis una especie de proxy. La etapa de control entrega a vuestro reproductor de vídeos exactamente lo que recoja del balanceador de carga, y así puede seguir haciendo sus estadísticas y sus cositas. El reproductor de vídeo recibirá una sola redirección.

    ¿Sirve?

  2. Guille dice:

    Pues nos ocurrió algo muy parecido cuando estábamos desarrollando el cliente de conexión Wi-Fi para Nokia en FON 😀

    En función de la versión del protocolo HTTP que se esté usando (1.0 ó 1.1) para procesar las respuestas que contienen un 302, puedes tener el problema de que la redirección se ejecute teniendo en cuenta solo las cabeceras o teniendo en cuenta todo el documento. Esto que aparentemente no tiene relación con tu problema, puede darte alguna pista más.

    Por ejemplo:
    ¿vuestro servidor y el servidor que entrega el video hablan la misma versión de protocolo?
    ¿en qué versión de protocolo hace el GET vuestro flash?
    si la redirección siempre es al mismo elemento en función de la que recibís y solo lo queréis procesar hacer de middleman una vez, ¿habéis considerado usar un 301?
    ¿la cabecera “Content-type” contiene el código MIME correcto?

    En cualquier caso, os sugiero tirar por la calle del medio y hacer la consulta y la descarga del flv en dos pasos. En el primer paso pedís la url y en el segundo hacéis la petición.

  3. Guille dice:

    (Lo que quiero decir con las versiones de HTTP y el 302 es que, a pesar de existir desde hace mucho, la implementación no es la misma en función de la versión del protocolo. No te puedes fiar de nada ^^

  4. yon dice:

    Jadri, no podemos hacer de proxy porque entonces perdemos la gracia del servicio distribuido, servir el vídeo desde el servidor externo mas cercano al cliente, y además seguimos cargando a nuestro servidor.

    Gracias Guille, voy a echar un ojo por ahí. Quizás podríamos plantearnos un 301 en la primera etapa (no se si valdrá para algo), pero en el segundo paso el 302 lo pone el proveedor y tiene sus razones.

    A falta de una solución completa, hemos resuelto en la mayoría de casos con la opción de NO hacer control y dar directamente la estática del proveedor distribuido, pero en casos concretos hacemos la consulta por CUrl al estático y le pasamos la dirección dinámica al cliente (con esto perdemos la distribuición geográfica, porque nos devuelve el servidor mas cercano a nosotros, no al cliente).

  5. Lek dice:

    Yo he encontrado los siguientes enlaces (buscando por “302 redirect problem with flash”), a ver si te valen para algo:

    http://groups.google.com/group/youtube-api-gdata/browse_thread/thread/0e3b72304e0ec5ca?pli=1

    http://jessewarden.com/2009/03/handling-crossdomainxml-and-302-redirects-using-netstream.html

    Los he mirado un poco por encima, por lo que tampoco sé exactamente si es tu problema.

  6. DailyCosas 2.0 » Blog Archive » Problema de doble redirección en … « Blog de Flash dice:

    […] Read more here: DailyCosas 2.0 » Blog Archive » Problema de doble redirección en … […]

  7. Javi dice:

    Yo estoy de acuerdo con lek en su segundo enlace, en el uso de un crossdomain.xml, para añadir nuevos dominios a los que poder acceder, para que la politica de seguridad del sandbox del reproductor no te de una excepción. Pero asegurate antes de la versión de reproductor que tienes, ya que en función de esto, la solución puede cambiar. De todas formas te he contado esto mismo en un mensaje que te he enviado a facebook.

    Por cierto, soy el amigo de Vicente. Un saludo.

¿Algo que comentar?