2012-03-28 36 views
10

Ho una pagina Web che implementa il modello post/redirect/get per evitare i doppi messaggi in una semplice applicazione CRUD.Post-Redirect-Get con Internet Explorer

La richiesta/sequenza di risposta previsto è:

  1. browser invia i dati tramite POST
  2. Server modifica DB, risponde con lo status 302 Moved Temporarily e un colpo di testa Location
  3. browser segue il reindirizzamento tramite GET
  4. Il server
  5. risponde con la pagina aggiornata

Questo è come dovrebbe funzionare - e lo fa, in Chrome per esempio.

Internet Explorer 9, tuttavia, invia anche il passaggio 3 come POST (compreso il set completo di dati del modulo!). Perché? Cosa devo fare per farlo usare GET?

Dovrei aggiungere che oltre alla stringa di query il reindirizzamento va nella stessa posizione del modulo di destinazione.

ho provato:

  • tutti disponibili delle modalità di rendering (IE7, IE8, IE9, stranezze, Standards, Compat)
  • un DOCTYPE completo
  • un URL relativo o assoluto in la Location intestazione
  • HTTP stato 303 (solo per vedere se questo fa alcuna differenza)
+0

Funziona con l'esempio più semplice possibile, senza DOCTYPE, ecc. Sei sicuro che IE9 invii effettivamente una seconda richiesta POST identica? Nessun proxy o qualcos'altro nel mezzo? – Jon

+0

Bene, guardare la scheda di rete nel debugger mi dice questo. Il server riceve anche un POST. – Tomalak

+3

RFC 2616 per gli stati HTTP/1.1, nella sezione 10.3.3 per [definizioni codice stato] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) che un browser reagisce a un '302' la risposta dovrebbe * non * cambiare il metodo usato, quindi un POST dovrebbe rimanere un POST. IE lo sta facendo davvero bene. Ma un '303' * dovrebbe * diventare un GET, quindi IE sta facendo * quello * sbagliato, secondo il tuo ultimo punto elenco. –

risposta

4

il codice di stato corretto se vuoi un GET è , anche se 301 e 302 faranno anche quello che vuoi nei browser comuni.

Se questo non funziona, qualcos'altro probabilmente è sbagliato. Una traccia HTTP sarebbe utile per trovare ciò che è sbagliato.

+0

Lo fornirò domani. – Tomalak

3

Non sono sicuro ma sembra che IE9 non abbia effettivamente inviato "POST" dopo il reindirizzamento 30x - lo visualizza solo nel suo debugger interno.

+2

Non sono sicuro che si tratti dello stesso problema dell'OP, ma è molto simile (Post-Redirect-Get + IE9). Ho appena confermato che è il debugger nel mio caso. –

+0

Anche io. In modalità IE9, il pannello di sviluppo della rete dice POST-> POST per 303 ma il server dice che sta ricevendo POST-> GET. :( – Ashley

2

Ho notato un comportamento simile. Si scopre che il debugger interno di IE11 riportava un POST ma utilizzando un'app di terze parti (Fiddler) ha segnalato che la richiesta era GET. Se vedi un POST in risposta a un 303/302, ricontrolla con un'app esterna.