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 è:
- browser invia i dati tramite
POST
- Server modifica DB, risponde con lo status
302 Moved Temporarily
e un colpo di testaLocation
- browser segue il reindirizzamento tramite
GET
Il server
- 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)
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
Bene, guardare la scheda di rete nel debugger mi dice questo. Il server riceve anche un POST. – Tomalak
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. –