Redirecionamento HTTP: 301 (permanente) vs. 302 (temporário)


381

O cliente deve se comportar de maneira diferente? Quão?


RFC 2616 - Códigos de status HTTP que eu poderia repetir tudo lá dentro, mas ele afirma que muito claramente;)
Tiemen

2
Vale ressaltar que a especificação também fornece códigos de status 303 e 307 para redirecionamentos temporários mais diferenciados.
Patrick McElhaney

303 e 307 não são mais necessários. O 303 deveria especificar que o novo URL é relacionado, mas não equivalente, e deve ser carregado com GET, mesmo que a solicitação atual seja POST, mas os navegadores também fazem isso com o 302 de qualquer maneira. O 307 deveria especificar explicitamente que o redirecionamento é temporário, ao contrário do 302, que não especificou se era temporário, mas os navegadores e os rastreadores tratam o 302 como temporário de qualquer maneira.
thomasrutter

Respostas:


569

Status 301 significa que o recurso (página) é movido permanentemente para um novo local. O cliente / navegador não deve tentar solicitar o local original, mas usar o novo local a partir de agora.

O status 302 significa que o recurso está localizado temporariamente em outro lugar, e o cliente / navegador deve continuar solicitando o URL original.


12
Obrigado. Isso significa que, se eu usar um redirecionamento 301 (permanente), o cliente poderá decidir nunca mais recuperar o local antigo e sempre usar diretamente o novo URL?
Flybywire 08/09/09

18
Exatamente! De fato, de acordo com as especificações, o cliente DEVE sempre ir para o novo local.
Philippe Leybaert 08/09/09

7
Mas em um navegador, como isso afeta? Reescrevendo o histórico no botão voltar, por exemplo, para evitar voltar ao errado em um 301? Alterar silenciosamente um marcador em 301 se você clicar em um antigo?
Xavi Montero

9
@XaviMontero maioria dos navegadores modernos armazenar em cache 301s e não vai incomodar solicitando a fonte original de todo para até 6 meses
Jon

34
Truque para Lembre-se HTTP Códigos de status 301> Perm e 302-> Temp Redirect Dois começa com T, mesmo que começa temporárias com T.
ScottCate

108

Quando um mecanismo de pesquisa spider encontra o código de status 301 no cabeçalho de resposta de uma página da web, entende que essa página não existe mais, procura pelo cabeçalho do local em resposta, escolhe o novo URL e substitui o URL indexado pelo novo e também transfere o pagerank .

Portanto, o mecanismo de pesquisa atualiza todo o URL indexado que não existe mais (301 encontrado) com o novo URL, isso reterá o tráfego da sua página da Web antiga, pagerank e desviará para a nova (você não perderá o tráfego da página da Web antiga).

Navegador: se um navegador encontrar o código de status 301, ele fará o cache do mapeamento da URL antiga com a nova URL, o cliente / navegador não tentará solicitar o local original, mas usará o novo local a partir de agora, a menos que o cache seja limpo.

insira a descrição da imagem aqui

Quando um mecanismo de busca encontra o status 302 de uma página da web, ele será redirecionado apenas temporariamente para o novo local e rastreará as duas páginas. O URL da página antiga ainda existe no banco de dados do mecanismo de pesquisa e sempre tenta solicitar o local antigo e rastreá-lo. O cliente / navegador ainda tentará solicitar o local original.

insira a descrição da imagem aqui

Leia mais sobre como implementá-lo no asp.net c # e qual é o impacto nos mecanismos de pesquisa - http://www.dotnetbull.com/2013/08/301-permanent-vs-302-temporary-status-code-aspnet -csharp-Implementation.html


35

Principalmente 301 vs 302 é importante para a indexação nos mecanismos de pesquisa, pois seus rastreadores levam isso em consideração e transferem o PageRank ao usar o 301.

Veja a resposta de Peter Lee para mais detalhes.


20

301 é que o recurso solicitado recebeu um novo URI permanente e qualquer referência futura a esse recurso deve ser feita usando um dos URIs retornados.

302 é que o recurso solicitado reside temporariamente em um URI diferente.

Como o redirecionamento pode ser alterado ocasionalmente, o cliente deve continuar usando o URI de solicitação para solicitações futuras.

Essa resposta só pode ser alterada se indicada por um campo de cabeçalho Cache-Control ou Expires.


11
Portanto, o 301 faz sentido, mas estou tendo dificuldade em encontrar um bom exemplo de uso para o 302 .
Bob Stein

4
@ BobStein-VisiBone, por exemplo, do redirecionamento 302: crie um arquivo old.php com o código <?php header("location: http://example.com/new.php"); ?>e o arquivo new.php - <?php echo 'I am new'; ?>e acesse o link . Irá redirecionar e exibir o texto "Eu sou novo". Em seguida, substitua o código em old.php para <?php echo 'I am old'; ?>e também vá para o link . Você verá o texto "Estou velho". Se você executou o redirecionamento 301 no old.php, teria visto o texto "Sou novo" mesmo após as alterações no código do old.php.
Apóstolo

2
@ BobStein-VisiBone Eu tenho uma página que está obsoleta e não pode ser exibida. Precisamos criar uma nova página, mas não ficaremos prontos por um tempo. Utilizamos um redirecionamento temporário para uma página existente que é útil para os visitantes. Depois que a nova página for criada, usaremos um redirecionamento permanente para ela.
EddieC

4
302 é útil se o seu URL de destino depende do estado.
Brian

7
Agora já faz um tempo, mas aqui está um bom exemplo. Os Webcomics geralmente têm um URL que leva aos quadrinhos mais recentes. Se isso é webcomic.com/lateste redireciona para webcomic.com/some-comic-titlecom um 301, o navegador sempre redireciona para "some-comic-title". Mesmo quando a próxima história em quadrinhos foi publicada e o "mais recente" agora é redirecionado para "outro título em quadrinhos" ... É aqui que um 302 seria melhor.
hsan

17

Os redirecionamentos 301 são armazenados em cache indefinidamente (pelo menos por alguns navegadores).

Isso significa que, se você configurar uma 301, visite essa página, além de ser redirecionado, mas esse redirecionamento será armazenado em cache.

Quando você visita essa página novamente, seu navegador * nem se preocupa em solicitar esse URL, mas apenas acessa o destino de redirecionamento em cache.

A única maneira de desfazer um 301 para um visitante com esse redirecionamento no cache é redirecionando novamente para o URL original **. Nesse caso, o navegador notará o loop e finalmente solicitará o URL inserido.

Obviamente, isso não é uma opção se você decidiu entrar no facebook ou em qualquer outro recurso que não esteja totalmente sob controle.

Infelizmente, muitos provedores de hospedagem oferecem um recurso em sua interface administrativa chamado simplesmente "Redirecionamento", que faz um redirecionamento 301. Se você estiver usando isso para redirecionar temporariamente seu domínio para o Facebook como uma página em breve, estará basicamente ferrado.

* pelo menos Chrome e Firefox, de acordo com quanto tempo os navegadores armazenam em cache o HTTP 301s? . Tentei apenas com o Chrome 45. Editar: O Safari 7.0.6 no Mac também faz cache, uma reinicialização do navegador não ajudou (o Link diz que no Safari 5 no Windows ele ajuda.)

** Eu tentei o javascript window.location = '', porque seria a solução que poderia ser aplicada na maioria dos casos - não funciona. Isso resulta em um loop infinito não detectado. No entanto, o php header('Location: new.url')quebra o loop

Conclusão: use apenas 301s se tiver certeza absoluta de que nunca mais usará esse URL. Geralmente nunca no diretório raiz (example.com/)


7

O principal problema com o 301 é o navegador armazenará em cache o redirecionamento, mesmo que você tenha desativado o redirecionamento no nível do servidor.

É sempre melhor usar 302 se você estiver ativando o redirecionamento para uma janela de manutenção curta.


Definitivamente, não é um "problema"; é exatamente como se destina a funcionar. Redirecionar HTTP para HTTPS, Redirecionar site abandonado para um novo, etc, são alguns dos usos habituais do 301.
HosseyNJF
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.