2010-09-16 13 views
8

Me acabo de encontrar con un problema relacionado con IE que parece que no hay prácticamente ninguna documentación sobre la 'Red: solo unas pocas personas hacen preguntas similares.¿Por qué IE emite respuestas XHR 408/12152 al azar usando jQuery post?

Cuando uso jQuery (1.4.2) para enviar una solicitud POST a mi servidor (a lo que el servidor responde enviando datos JSON), de vez en cuando obtengo errores XHR 408 (lo que significa que el servidor agotó el tiempo de espera cliente para terminar su solicitud), y (con menor frecuencia), XHR 12152 errores (no sé lo que estos significan). No parece haber un patrón para esto.

Esto solo ocurre en IE (versión 8 - No he probado otras versiones, aunque puedo confirmar que el problema ocurre en dos instalaciones diferentes). Safari y Opera parecen estar bien.

Esto no parece ser un problema con las solicitudes GET.

Si alguien tiene alguna idea al respecto, le estaría muy agradecido.

+0

Creo que 12152 es algo así como "el servidor se ha desactivado momentáneamente para el mantenimiento de bases de datos o servidores, o ha habido un error de red". Entonces, agote el tiempo, esencialmente. – Robert

+0

Dado que obtiene dos errores de tiempo de espera, ¿ha intentado extender el tiempo de espera? – Robert

+0

Ocurre en IE9 también. Error 12152 y error 12031. Parece que ocurre con las solicitudes AJAX, y hasta ahora impredecible. – nothingisnecessary

Respuesta

8

Cuando ve IE devolviendo cosas en status que claramente no son códigos de estado HTTP, en realidad son números de error de Windows, generalmente de WinInet.

12152 ERROR_HTTP_INVALID_SERVER_RESPONSE parece confirmar la implicación de 408 que hay un problema de sintaxis HTTP de bajo nivel entre su navegador y el servidor. Tradicionalmente, esto ha sido un problema con la implementación ActiveX de XMLHttpRequest y keep-alives en HTTPS, pero la causa exacta es bastante turbia.

Quizás podría intentar tener el servidor configurado Connection: close en XMLHttpRequests que provienen de IE, ver si eso ayuda? Esto afectará el rendimiento, desafortunadamente.

+0

Acabo de pasar un tiempo asegurándome de que no haya nada en mi código que pueda ser responsable, y me inclino a pensar que, como usted dice, el problema reside en IE. Como novato total en lo que respecta a jQuery, ¿me puede dar algún indicador de cómo podría emitir una 'Conexión: cerrar' como parte del proceso de POSTING? – narnianUK

+0

Creo que no puede configurarlo en la solicitud de XMLHttpRequest, pero debería poder configurarlo en la respuesta del servidor. Puede oler User-Agent en el servidor para establecer el encabezado solo para IE, pero dados los problemas de la detección de UA en el lado del servidor, es mejor detectar IE de JS (por ejemplo, usando un comentario condicional) y pasar un parámetro como ' ? close = true' para decirle al servidor que lo haga. No lo he intentado yo mismo, estaría interesado en ver si lo resuelve. Personalmente, lo que recibo son errores de socket cerrado muy ocasionales en los registros, solo desde IE XMLHttpRequest. – bobince

+0

Creo que eso lo resolvió: acabo de enviar un 'Conexión: cerrar' en el encabezado de PHP. He estado ejecutando un script JS que POSTS cada dos segundos, y hasta el momento, no arrojó ningún error, donde antes, lo habría hecho. Lo mantendré funcionando un poco más, pero creo que acabas de guardar el trabajo de los últimos meses que he hecho; ¡gracias! – narnianUK

3

Lo resolví agregando "Conexión: cerrar" al encabezado ajax también.

No es necesario agregar "Conexión: cerrar" al encabezado de respuesta del servidor.

He probado disparando 1,000 solicitudes.

+1

Recupero mis palabras. Necesita conexión: cierre también del lado del servidor. – Tanin

+0

¿cómo se agrega la conexión cerca de la solicitud? La conexión es una información que no es posible cambiar de acuerdo w3c el navegador es responsable de configurarlo. Traté de cambiar manualmente y no funciona. –

Cuestiones relacionadas