HTTP 301

301 Movido Permanentemente é um código de status de resposta HTTP usado para redirecionamento permanente de URL, o que significa que links ou registros que atualmente utilizem a URL da qual a resposta foi recebida devem ser atualizados para a nova. A nova URL deve ser fornecida no campo Location incluído na resposta.

O redirecionamento 301 é considerado uma boa prática de atualização dos usuários, no caso de mudar de HTTP para HTTPS.[1] RFC 2616 estabelece que:

  • Se um cliente tem suporte à edição de links, ele deve atualizar todas as referências à URL requisitada.
  • A resposta pode ser armazenada em cache.[2]
  • A não ser que o método da requisição seja HEAD, a entidade deve conter uma pequena nota em hipertexto com um hiperlink para a(s) nova(s) URL(s).
  • Se o código de status 301 é recebido como resposta de uma requisição de qualquer outro tipo que não seja GET ou HEAD, o cliente deve perguntar ao usuário antes de redirecionar.

Exemplo

Requisição do cliente:

GET /index.php HTTP/1.1
Host: www.example.org

Resposta do servidor:

HTTP/1.1 301 Moved Permanently
Location: http://www.example.org/index.asp

No exemplo a seguir é utilizado um arquivo .htaccess para redirecionar uma URL insegura para um endereço seguro sem o prefixo "www":

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [R,L] 

No exemplo a seguir é utilizado um redirecionamento em PHP:

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://example.com/newpage.html");
exit();
?>

Isso é igualmente simples em uma configuração nginx:

location /old/url/ {
    return 301 /new/url;
}

Mecanismos de busca

Tanto o Bing quanto o Google recomendam o uso de um redirecionamento 301 para alterar a URL de uma página tal como ela é mostrada nos resultados do mecanismo de pesquisa.[3][4]

Referências

  1. «Proteger seu site com HTTPS». support.google.com. Consultado em 30 de janeiro de 2017 
  2. How long do browsers cache HTTP 301s? - https://stackoverflow.com/questions/9130422/how-long-do-browsers-cache-http-301s
  3. Site Move Tool - Bing Webmaster Help & How-to - https://www.bing.com/webmaster/help/how-to-use-the-site-move-tool-bb8f5112
  4. 301 redirects - Google Webmaster Tools Help - http://support.google.com/webmasters/bin/answer.py?hl=en&answer=93633