2011-08-04 13 views
6

Tengo un formulario con algunos campos. Cuando envía el formulario, el servidor responde con un redireccionamiento (HTTP 302).IE no sigue la redirección, da "Internet Explorer no puede mostrar la página web"

Cuando se envía el formulario, si hay un campo <input type=file>, IE no sigue el redireccionamiento, sino que produce un error: "Internet Explorer no puede mostrar la página web".

Si no hay ningún <input type=file> campo, entonces se sigue la redirección como se esperaba.

La respuesta HTTP 302 es exactamente igual en ambos casos, difiriendo solo por la marca de tiempo de la respuesta.

Estoy experimentando esto en IE8 e IE9. (No he probado versiones más bajas). Firefox, Chrome, Opera y Safari siguen el redireccionamiento como se esperaba.

Notas:

  • El formulario tiene el atributo enctype="multipart/form-data".
  • Esto está sucediendo a través de SSL
  • El redireccionamiento no es a un protocolo, host o puerto diferente de la URL en la que se encuentran los formularios POST o en los que está alojado.
  • Cuando inspecciono el tráfico HTTP con Fiddler2, desaparece el problema y se comporta IE.
+0

Impar. una redirección 302 haría que el navegador emitiera un GET en la página de destino, lo que perdería el archivo cargado (si lo hubiera). Tal vez el error de IE es una indicación de esto (y IE siempre tiene mensajes de error). Sin embargo, no explica por qué Fiddler "arreglaría" las cosas. –

+0

@Marc, en el servidor es una aplicación de Rails. Acepta la solicitud, guarda el archivo y otras cosas en la base de datos, luego responde con un redireccionamiento a otra página. Debería emitir una solicitud GET a esta nueva página, pero no es así. – nicholaides

Respuesta

5

¿Está su redirección a una URL parcial o completa (con host, protocolo, etc.)? He visto muchos ejemplos en PHP en los que una redirección con 302 que no tiene un http://server.dom/path/to/file completo será ignorada o destruida por IE. En Rails, esta puede ser la diferencia entre foo_path y foo_url en el enrutador.

+0

Gracias, voy a intentar eso. – nicholaides

+0

Gracias, esto pareció funcionar. Tengo la sensación de que era un problema con la forma en que mi balanceador de carga reescribe las respuestas de "302 Redirect" cuando se trata de w/HTTPS – nicholaides

3

sólo para añadir a esto para que nadie tenga el mismo problema:

IE parece bastante estrictas sobre cómo se formó el comando de cabecera. Mi solicitud fue luchando con:

header("location:http://www.test.co.uk/test/test.php"); 

o

header("location:test.php"); 

Pero comenzó a trabajar cuando el comando se modificó a:

header("Location: http://www.test.co.uk/test/test.php"); 
6

La pregunta es de 3 años, pero recientemente me encontré con este problema yo mismo y no encontré la respuesta correcta en ninguna parte. La respuesta marcada como aceptada aquí realmente no responde nada.

Lo que hizo la diferencia para mí estaba añadiendo el siguiente encabezado de la respuesta 302:

Connection: close 

estaba a redirigir a otro sitio con la URL completa, y parece que IE está tratando de optimizar las conexiones mediante el envío subsecuente solicita sobre la misma secuencia TCP sin volver a abrirlo, pero no es lo suficientemente inteligente como para darse cuenta de que el sitio es diferente sin instrucciones explícitas de "Conexión" en el encabezado.

Esto ocurre en al menos IE10 e IE11, y ninguno de los otros navegadores tiene este problema.

+0

dónde poner esta configuración? –

+1

@Mashit no es configuración, es código. En ASP.Net aplicación, esto sería: 'System.Web.HttpContext.Current.Response.AddHeader ("Conexión", "cerrar");' En caso de PHP, sería algo como esto: 'header ('Connection: close')' Aunque hasta ahora he encontrado que este es el problema solo en IIS antes de la versión 8. – Cozzamara

+0

Sí. Intenté configurar el encabezado de esa manera en php. pero parece que no funciona –

Cuestiones relacionadas