2010-09-16 13 views
8

Mi sono appena imbattuto in un problema relativo a IE sul fatto che non sembra esserci praticamente alcuna documentazione sulla "Rete" - solo alcune persone hanno posto domande simili.Perché IE emette risposte XHR 408/12152 casuali utilizzando il post di jQuery?

Quando uso jQuery (1.4.2) per inviare una richiesta POST al mio server (a cui il server risponde inviando dati JSON), occasionalmente ricevo errori XHR 408 (il che significa che il server è scaduto durante l'attesa del client per completare la richiesta) e (meno frequentemente), errori XHR 12152 (non so cosa significano). Non sembra esserci uno schema per questo.

Questo si verifica solo in IE (versione 8 - Non ho provato altre versioni, anche se posso confermare che il problema si verifica su due diverse installazioni). Safari e Opera sembrano a posto.

Questo non sembra essere un problema con le richieste GET.

Se qualcuno ha qualche idea in merito, sarei molto grato.

+0

Credo che 12152 sia qualcosa di simile a "il server è stato rimosso temporaneamente per la manutenzione del database o del server, oppure si è verificato un errore di rete". Quindi, timeout, essenzialmente. – Robert

+0

Dato che stai ricevendo due errori di timeout, hai provato ad estendere il tempo di timeout? – Robert

+0

Si verifica anche in IE9. Errore 12152 e errore 12031. Sembra che si verifichino con richieste AJAX, e finora imprevedibili. – nothingisnecessary

risposta

8

Quando si visualizza IE restituendo elementi in status che chiaramente non sono codici di stato HTTP, in realtà sono numeri di errore di Windows, in genere da WinInet.

12152 ERROR_HTTP_INVALID_SERVER_RESPONSE sembrerebbe confermare l'implicazione dello 408 che esiste un problema di sintassi HTTP di basso livello tra il browser e il server. Tradizionalmente questo è stato un problema con l'implementazione ActiveX di XMLHttpRequest e keep-alive in HTTPS, ma la causa esatta è piuttosto torbida.

Si potrebbe provare ad avere il server impostato Connection: close su XMLHttpRequests provenienti da IE, vedere se questo aiuta? Questo influenzerà le prestazioni, sfortunatamente.

+0

Ho appena trascorso un po 'di tempo per assicurarmi che non ci sia nulla nel mio codice che possa essere responsabile, e sono propenso a pensare che - come dici tu - il problema risieda nello stesso IE. Come newbie totale quando si tratta di jQuery, puoi darmi qualche indicazione su come potrei andare a rilasciare un 'Connection: close' come parte del processo POSTing? – narnianUK

+0

Penso che non sia possibile impostarlo sulla richiesta da XMLHttpRequest, ma dovresti essere in grado di impostarlo sulla risposta dal server. Si potrebbe annusare User-Agent sul server per impostare l'intestazione solo per IE, ma dati i problemi dello sniffing UA sul lato server potrebbe essere meglio rilevare IE da JS (ad esempio usando un commento condizionale) e passare un parametro come ' ? close = true' per dire al server di farlo. Non l'ho provato io stesso, sarei interessato a vedere se lo risolve. Personalmente, ciò che ottengo sono errori di socket chiusi occasionali nei log, sempre e solo da IE XMLHttpRequest. – bobince

+0

Penso che sia risolto - Ho appena inviato un 'Connessione: chiudere' nell'intestazione da PHP. Ho eseguito uno script JS con POST ogni due secondi, e finora non ha generato alcun errore, dove prima avrebbe funzionato. Continuerò a funzionare un po 'più a lungo, ma penso che tu abbia appena salvato il lavoro degli ultimi mesi che ho svolto; grazie! – narnianUK

3

Ho risolto aggiungendo "Connessione: chiudi" anche all'intestazione di ajax.

Non è necessario aggiungere "Connessione: chiusa" all'intestazione della risposta dal server.

Ho provato a sparare 1.000 richieste.

+1

Riprendo le mie parole. Hai bisogno di una connessione: chiudi anche sul lato server. – Tanin

+0

come si aggiunge la connessione alla richiesta? La connessione è una informazione che non è possibile modificare in base a w3c il browser è responsabile di impostarlo. Ho provato a cambiare manualmente e non funziona. –

Problemi correlati