Exemplos de 302 vs 303

17

Qual é a diferença entre uma resposta 302 e 303 ?

link

  • 10.3.3 302 Encontrados
  • 10.3.4 303 Ver Outro

São estes intercambiáveis ou por que um seria usado sobre o outro? Você poderia, por favor, fornecer um caso de uso de quando um seria usado (e o outro não)?

    
por David542 21.05.2012 / 21:38

3 respostas

30

A descrição na página à qual você vinculou parece ser bastante descritiva da finalidade pretendida:

Um redirecionamento 302 indica que o redirecionamento é temporário - os clientes devem verificar novamente o URL original em solicitações futuras.

Um redirecionamento 303 destina-se a redirecionar uma solicitação POST para um recurso GET (caso contrário, o cliente assume que o método de solicitação para o novo local é o mesmo do recurso original).

Se você estiver redirecionando um cliente como parte de seu aplicativo da web, mas espera que ele sempre inicie no aplicativo da web (por exemplo, um encurtador de URL), um redirecionamento 302 parece fazer sentido. Um redirecionamento 303 é para uso quando você está recebendo POST dados de um cliente (por exemplo, um envio de formulário) e você deseja redirecioná-los para uma nova página da Web a ser recuperada usando GET em vez de POST (por exemplo, uma solicitação de página padrão).

Mas veja esta nota das definições do código de status - a maioria dos clientes fará o mesmo com 302 ou 303:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.
    
por 21.05.2012 / 21:40
11

Existem quatro tipos diferentes de redirecionamento (atualmente). Originalmente, havia apenas dois, mas a maioria dos clientes implementou o redirecionamento 302 incorretamente, então mais dois foram adicionados para esclarecer a diferença entre os dois diferentes comportamentos possíveis ao receber um 302.

O RFC que você vinculou afirma isso na seção sobre redirecionamentos 302:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.
  1. Um redirecionamento 301 é um redirecionamento permanente. É passível de armazenamento em cache e quaisquer marcadores para este URL devem ser atualizados para apontar para o novo URL.
  2. Um redirecionamento 302 é um redirecionamento temporário. Ele não pode ser armazenado em cache por padrão e deve ser solicitado novamente toda vez (mas é possível substituir isso por cabeçalhos de armazenamento em cache). A solicitação de acompanhamento deve usar o mesmo método (POST, GET, CONNECT, PUT, DELETE, etc.) como a solicitação original e para qualquer outra coisa que não sejam solicitações GET e HEAD, o cliente deve avisar o usuário antes de fazer a solicitação. Esta é a parte que os clientes erraram e a maioria deles mudou o método para o pedido de acompanhamento para GET, independentemente do método original.
  3. Um redirecionamento 303 é o mesmo que um 302, exceto que a solicitação de acompanhamento agora é explicitamente alterada para uma solicitação GET e nenhuma confirmação é necessária.
  4. Um redirecionamento 307 é o mesmo que um 302, exceto que a solicitação de acompanhamento agora é explicitamente a mesma que a solicitação original e a confirmação deve ser adquirida do usuário para métodos de solicitação diferentes de GET e HEAD.

Clientes mais antigos podem não entender o redirecionamento 303. Qualquer coisa que faça uma solicitação HTTP / 1.1 deve entender uma resposta 303.

É possível considerar 300 e 305 respostas como redirecionamentos, o que significa que existem seis tipos diferentes.

    
por 22.05.2012 / 12:02
0

Os tipos de redirecionamento (301.302.303 ...) usados têm muito impacto sobre como os mecanismos de pesquisa indexarão e classificarão o conteúdo. Algumas aranhas podem até se recusar a indexar conteúdo temporariamente redirecionado. Detalhes podem ser encontrados em várias literaturas de SEO ...

    
por 21.05.2012 / 21:45

Tags