Pubblica/Reindirizza/Ottieni - Post/Redirect/Get

Image
Diagramma di un doppio problema POST riscontrato negli interpreti.
Image
Schema del problema del doppio POST sopra descritto da PRG.

Post/Redirect/Get ( PRG ) è un modello di progettazione per lo sviluppo web che consente di ricaricare, condividere o aggiungere un segnalibro alla pagina mostrata dopo l' invio di un modulo senza effetti negativi, come l'invio del modulo un'altra volta.

Quando un modulo Web viene inviato a un server tramite una richiesta HTTP POST , i tentativi di aggiornare la risposta del server possono causare il reinvio del contenuto del POST originale, con possibili risultati indesiderati, ad esempio un acquisto Web duplicato . Alcuni browser mitigano questo rischio avvisando l'utente che stanno per inviare nuovamente una richiesta POST.

Per evitare questo problema, molti sviluppatori Web utilizzano il pattern PRG: invece di rispondere con il contenuto, il server risponde a una richiesta POST reindirizzando il client a un'altra posizione. La specifica HTTP 1.1 ha introdotto il codice di risposta HTTP 303 ("Vedi altro") per garantire che in questa situazione i browser possano aggiornare in sicurezza la risposta del server senza causare il reinvio della richiesta POST iniziale.

Il modello PRG non può affrontare ogni scenario di invio di moduli duplicati. Ad esempio, se un utente Web si aggiorna prima del completamento dell'invio iniziale, probabilmente a causa del ritardo del server , si verifica un POST duplicato in alcuni agenti utente.

segnalibri

Gli agenti utente (come i browser) memorizzano solo l' URL di una richiesta HTTP come segnalibro. Per questo motivo, non è possibile aggiungere un segnalibro a una risposta basata sul corpo della richiesta HTTP POST. Con il pattern PRG, l'URI della richiesta può essere tranquillamente aggiunto ai segnalibri.

Riferimenti

link esterno