Publicar / Redirecionar / Obter - Post/Redirect/Get

Diagrama de um problema de POST duplo encontrado em agentes do usuário.
Diagrama do problema do duplo POST acima sendo resolvido pelo PRG.

Post / Redirect / Get ( PRG ) é um padrão de design de desenvolvimento da web que permite que a página exibida após o envio de um formulário seja recarregada, compartilhada ou marcada sem efeitos prejudiciais, como enviar o formulário em outra ocasião.

Quando um formulário da web é enviado a um servidor por meio de uma solicitação HTTP POST , as tentativas de atualizar a resposta do servidor podem fazer com que o conteúdo do POST original seja reenviado, possivelmente causando resultados indesejados, como uma compra duplicada na web . Alguns navegadores atenuam esse risco avisando ao usuário que eles estão prestes a emitir novamente uma solicitação POST.

Para evitar esse problema, muitos desenvolvedores da web usam o padrão PRG - em vez de responder com conteúdo, o servidor responde a uma solicitação POST redirecionando o cliente para outro local. A especificação HTTP 1.1 introduziu o código de resposta HTTP 303 ("Ver outro") para garantir que, nessa situação, os navegadores possam atualizar com segurança a resposta do servidor sem fazer com que a solicitação POST inicial seja reenviada.

O padrão PRG não pode abordar todos os cenários de envio de formulário duplicado. Por exemplo, se um usuário da web atualizar antes da conclusão do envio inicial, possivelmente devido ao atraso do servidor , ocorrerá um POST duplicado em determinados agentes do usuário.

Favoritos

Os agentes do usuário (como navegadores) armazenam apenas a URL de uma solicitação HTTP como um marcador. Por isso, uma resposta baseada no corpo da solicitação HTTP POST não pode ser marcada. Com o padrão PRG, o URI da solicitação pode ser marcado com segurança.

Referências

links externos