Guia completo dos códigos de estado HTTP: série 300
Os códigos de estado HTTP 300 estão reservados para redirecionamentos. A maioria dos redirecionamentos é transparente para o utilizador final e é tratada inteiramente pelo user-agent.

Para perceber melhor porque é que os redirecionamentos são tão importantes, ajuda perceber porque se usaria um redirecionamento, para começar.
Os redirecionamentos resultam normalmente de uma mudança. Pode ser uma mudança de recursos de computação, de terminologia de marketing, de política, de estratégia de SEO ou de funcionamento do negócio. Algures, algo mudou e exige que o mesmo URI fique acessível numa localização diferente.
Quando se fazem alterações, os motores de busca e outras fontes mantêm as ligações antigas até o site ser indexado de novo.
A alternativa a um redirecionamento seria um erro 404 «document not found».
Um cenário extremo que obrigue a redirecionar um user-agent seria uma empresa a reorganizar a sua gama de produtos. Digamos, por exemplo, que a ACME Co. transferiu a linha Widgets para a ACME Labs. A política atual da ACME dita uma estrutura web da forma: acmeco/{division}/{productline}.
Assim, a ACME pode ter:
www.acme.com www.acme.com/marketing/seotechnologies/ www.acme.com/marketing/billboards/ www.acme.com/consumergoods/sports/ www.acme.com/consumergoods/clothing/ www.acme.com/consumergoods/widgets/ www.acme.com/labs/widgets/ www.acme.com/labs/foobars/ www.acme.com/labs/betaproducts/
Os ACME Widgets estiveram em www.acme.com/consumergoods/widgets/ nos últimos 5 anos e recebem dezenas de milhares de acessos por hora nessa localização.
Consegue imaginar quanta receita esta simples mudança poderia custar à ACME Co., em vendas perdidas, em apoio ao cliente a responder a reclamações e em quadros a atender o telefone para declarações oficiais à imprensa sobre a estimada linha Widget?
E os motores de busca? Uma boa parte das vendas de Widgets da ACME Co. vem de acessos através de motores de busca. Para não falar da campanha de Google Ads e do URL impresso em brochuras e cartões de visita.
Um redirecionamento da série 300 pode resolver o problema para toda a gente na ACME Co. A ACME pode simplesmente configurar o servidor web para redirecionar todos os pedidos de www.acme.com/consumergoods/widgets/ para www.acme.com/labs/widgets/.
(hr)
Exemplo real de um redirecionamento 301
Na EuroVPS usamos um redirecionamento 301 para garantir que os visitantes utilizam o protocolo seguro HTTPS.
Eis exatamente como o redirecionamento 301 garante que cada visitante acede por HTTPS quando visita a EuroVPS:
- o user-agent pede http://www.eurovps.com/
- o servidor web responde com o código de estado 301
- o servidor web define um cabeçalho Location para a versão https
- a maioria dos user-agents redireciona automaticamente para o novo URL

Os redirecionamentos podem ser feitos em linguagens de scripting como Python Django, PHP e ASP .Net. No entanto, uma solução mais robusta é deixar os redirecionamentos a cargo do servidor web, com uma regra de rewrite.
Redirecionamento em PHP:
<?php // Permanent 301 Redirect via PHP header("HTTP/1.1 301 Moved Permanently"); header("Location: https://eurovps.com/"); exit; // stop the script once the redirect is sent
O problema de fazer redirecionamentos nesta camada tão alta é que podemos acabar a editar 100 páginas! Ou pior ainda, a mexer em código de um sistema de gestão de conteúdos que pode não fazer os redirecionamentos como gostaríamos.
Uma solução muito mais elegante é deixar o servidor web fazer todo o redirecionamento por nós.
No Apache, os redirecionamentos podem ser feitos assim:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
No nginx, o mesmo redirecionamento é uma linha no server block que escuta na porta 80:
server { listen 80; server_name www.example.com; return 301 https://$host$request_uri; }
(hr)
Redirecionamentos com código de estado 300
300 Multiple Choices
O 300 Multiple Choices é um redirecionamento raramente usado no mundo real. O 300 Multiple Choices surge quando um recurso pedido aponta para vários destinos para o mesmo documento pedido. É apresentada ao utilizador final uma escolha de ação, para que selecione a opção pretendida.
301 Moved Permanently
Os redirecionamentos 301 são comuns porque os motores de busca tratam um 301 como uma mudança permanente: atualizam o seu índice para o novo URI e transferem os sinais de classificação.
Quando um cliente encontra um 301, os marcadores e os user-agents automatizados devem ser atualizados para o novo URI.
302 Found
Os redirecionamentos 302 devem ser usados quando um URI pedido está temporariamente numa nova localização. O user-agent segue o cabeçalho Location até ao URI temporário. Por razões históricas, a maioria dos clientes transforma um POST num GET ao seguir um 302. Use um 307 quando o método tiver de ser mantido.
Ao contrário do 301, os user-agents devem continuar a usar o URI original, porque se trata de um redirecionamento temporário.
303 See Other
O 303 destina-se sobretudo a pedidos POST e PUT que são levados para um URI diferente do pedido originalmente pelo user-agent no seu pedido POST ou PUT.
Um exemplo pode ser o carregamento de um ficheiro grande que demore alguns minutos:
- o user-agent submete um ficheiro grande com PUT ou POST
- o ficheiro destina-se ao URI original
- o servidor web devolve um 303 que redireciona para uma página de estado do carregamento
- o user-agent usa GET através do 303, pedindo uma página de estado do carregamento
304 Not Modified
O 304 Not Modified é usado para fins de caching. O 304 é enviado como estado a um user-agent que pede uma verificação do estado atual de uma página em cache.
Se a página pedida continuar atual, o servidor responde com um 304 e sem corpo, e o user-agent mostra a sua cópia em cache ao utilizador final.

305 Use Proxy (descontinuado)
O 305 Use Proxy está descontinuado. A especificação HTTP atual, o RFC 9110, indica-o como já não utilizado, e os browsers não agem sobre ele. Não o use.
307 Temporary Redirect
O 307 é semelhante ao 302, mas exige que seja usado o mesmo método de pedido no URI redirecionado. Seria usado, por exemplo, quando um pedido POST tem de ser enviado para outro URI.
Com um 302, a maioria dos clientes muda para um pedido GET para obter o URI redirecionado.
308 Permanent Redirect
O 308 é o equivalente permanente do 307. Como o 301, diz aos clientes que o recurso mudou definitivamente. Como o 307, exige que o cliente repita o pedido com o mesmo método. Use-o quando uma mudança permanente tiver de manter um POST como POST.
Os códigos de estado deste guia estão definidos no RFC 9110 (HTTP Semantics).
Artigo relacionado: Guia completo dos códigos de estado HTTP: série 400
Do arquivo do blog da EuroVPS, publicado pela primeira vez em 12 de dezembro de 2019.
Todas as notas de campo