2009-11-11 11 views
7

He estado probando el navegador PS3 (NetFront) con componentes Flash incrustados en una página web y parece que hay un error bastante serio con la forma en que se emiten las solicitudes de Flash. El navegador está agregando un referrer (referer) y también lo está el reproductor Flash que da como resultado encabezados duplicados. Esto está realmente bien si los encabezados de referencia son los mismos, sin embargo, no lo son, y como resultado, http.sys detiene la solicitud en W2k8. Este es un problema importante para mí ya que tengo un componente Flash que necesita llamar a los servicios web para funcionar.Duplicate Referrer Header - HTTP.sys barfs

¿Hay alguna manera de que podamos filtrar o permitir estas solicitudes, posiblemente eliminando los encabezados duplicados en el camino.

Algunas de las soluciones que hemos pensado, pero que son ya sea subóptima o no es posible con nuestro desarrollo y entornos reales son:

  • Adición de un proxy delante de los servidores para limpiar la solicitud.
  • Solucionando la solicitud en nuestros equilibradores de carga. Esto puede funcionar en nuestro entorno en vivo, pero no en el desarrollo. También utilizar un equilibrador de carga para realizar esta operación es una mala práctica, nuestro equipo de operaciones no estaría satisfecho :)
  • Envíe todos los datos a Flash durante la inicialización a través de flashvars. Posiblemente haciendo cualquier actualización/devolución de llamada a través de Javascript. Esto se siente complicado y requerirá un código personalizado significativo para una plataforma.
  • Evite que el navegador o Flash envíen encabezados de referencia. Esto sería aceptable, sin embargo, no parece haber una manera de habilitar esto en Flash o NetFront.

Como referencia la siguiente petición será reproducir el problema (copiar y pegar en Fiddler u otra herramienta, estoy suponiendo que está ejecutando IIS 7, W2K8 ya que estamos). Debería obtener una respuesta 400 Bad Request.

 
GET/HTTP/1.1 
Host: localhost 
Referer: http://localhost/NetFrontBrowser/ 
Referer: http://localhost/Flash/ 

Muchas gracias

Respuesta

1

stmedit del Windows DDK "demuestra el reemplazo de un patrón de cadena para una conexión del Protocolo de control de transmisión (TCP) con la Plataforma de filtrado de Windows (WFP)".

Un poco de hackers adicionales lo convierte en un FSM que puede volcar todo menos la primera cadena de referencia.

1

Si éstos numero 1-4, yo diría que 2 hace el mejor sentido para su entorno directo, mientras que 3 podría ser algo que tenía que hacer si su entorno de desarrollo no puede coincidir de manera similar con su entorno en vivo. Los números 1 y 2 son bastante similares, ya que un balanceador de carga es básicamente un proxy inverso. El número 4, como usted señaló, parece imposible sin esperar a que Sony actualice el navegador y el complemento que está utilizando, lo que parece poco probable, ya que probablemente lo procesaron y tienen un mal control en primer lugar (algo así como el firmware en mi televisión hecha en Corea se hace en Palo Alto, y les llevó 10 meses cumplir con la GPL debido a que no podían comunicarse lo suficientemente bien).

1

Apache tiene el módulo mod_headers. Esto resolvería su problema, pero si tiene que usar http.sys, entonces trataría de encontrar algo equivalente a mod_headers. Tal vez alguien ha portado mod_headers a http.sys?

También evaluaría la reescritura de URL. Sé que esto se trata de encabezados y no de URL, pero quizás el módulo de reescritura de URL de http.sys (si existe) conoce los encabezados.

Supongo que el mod_headers o mod_rewrite equivalente para http.sys puede manejar la solicitud antes de http.sys barfs.

¡Buena suerte!

1

Agregar esto al HTML detendrá el uso del referrer si no es necesario.

<meta name="referrer" content="never"> 

Por favor, vote si la respuesta es buena!

+0

Gracias por la respuesta, lamentablemente no puedo probarlo, y el problema ha pasado hace mucho tiempo, ¡pero me gusta pensar! Desafortunadamente esa etiqueta parece que se desarrolló después del navegador NetFront con el que habríamos estado trabajando, pero esta solución podría funcionar para cualquier otra persona con un problema más actual. –