Uma visão geral de 301
, 302
e307
O RFC 7231 , a referência atual para semântica e conteúdo do protocolo HTTP / 1.1, define o código de status 301
(Movido permanentemente) e 302
(Encontrado), que permite que o método de solicitação seja alterado de POST
para GET
. Essa especificação também define o 307
código de status (Redirecionamento temporário) que não permite que o método de solicitação seja alterado de POST
para GET
.
Veja mais detalhes abaixo:
6.4.2 301 mudou-se permanentemente
O 301
código de status (Movido permanentemente) indica que o recurso de destino recebeu um novo URI permanente e qualquer referência futura a esse recurso deve usar um dos URIs incluídos. [...]
Nota: Por razões históricas, um agente usuário pode alterar o método de pedido POST
para GET
o pedido posterior. Se esse comportamento for indesejado, o 307
código de status (Redirecionamento temporário) pode ser usado.
6.4.3 302 Encontrados
O 302
código de status (Encontrado) indica que o recurso de destino reside temporariamente em um URI diferente. Como o redirecionamento pode ser alterado ocasionalmente, o cliente deve continuar usando o URI de solicitação efetivo para solicitações futuras. [...]
Nota: Por razões históricas, um agente usuário pode alterar o método de pedido POST
para GET
o pedido posterior. Se esse comportamento for indesejado, o 307
código de status (Redirecionamento temporário) pode ser usado.
6.4.7 307 Redirecionamento temporário
O 307
código de status (Redirecionamento temporário) indica que o recurso de destino reside temporariamente em um URI diferente e o agente do usuário NÃO DEVE alterar o método de solicitação se ele executar um redirecionamento automático para esse URI. Como o redirecionamento pode mudar com o tempo, o cliente deve continuar usando o URI de solicitação efetivo original para solicitações futuras. [...]
Nota: Esse código de status é semelhante a 302
(Encontrado), exceto que não permite alterar o método de solicitação de POST
para GET
. Esta especificação não define contrapartida equivalente para 301
(Movido permanentemente) ( RFC 7238 , no entanto, define o código de status 308
(redirecionamento permanente) para esse propósito).
A necessidade de 308
O RFC 7238 foi criado para definir o 308
código de status (Redirecionamento permanente), que é semelhante a 301
(Movido permanentemente), mas não permite que o método de solicitação seja alterado de POST
para GET
.
O 308
código de status agora é definido pelo RFC 7538 (que obsoleta o RFC 7238 ).
3. 308 redirecionamento permanente
O 308
código de status (Redirecionamento permanente) indica que o recurso de destino recebeu um novo URI permanente e quaisquer referências futuras a esse recurso devem usar um dos URIs incluídos. Clientes com recursos de edição de link devem vincular automaticamente automaticamente as referências ao URI de solicitação efetivo a uma ou mais das novas referências enviadas pelo servidor, sempre que possível. [...]
Nota: Esse código de status é semelhante a 301
(Movido permanentemente), exceto pelo fato de não permitir alterar o método de solicitação de
POST
para GET
.
Se temos o seguinte:
+-----------+-----------+
| Permanent | Temporary |
+------------------------------------------------------------+-----------+-----------+
| Allows changing the request method from POST to GET | 301 | 302 |
+------------------------------------------------------------+-----------+-----------+
| Doesn't allow changing the request method from POST to GET | 308 | 307 |
+------------------------------------------------------------+-----------+-----------+
Escolhendo o código de status mais adequado
Michael Kropat montou um conjunto de gráficos de decisão que ajudam a determinar o melhor código de status para cada situação. Consulte o seguinte para 2xx
e 3xx
códigos de status: