O protocolo HTTP define mais de 40 códigos de status de servidor, 9 dos quais são explicitamente para redirecionamentos de URL. Cada código de status de redirecionamento começa com o numeral 3 (HTTP 3xx) e tem seu próprio método de lidar com os redirecionamentos. Enquanto alguns deles são semelhantes, todos eles cuidam dos redirecionamentos de forma diferente.

Entender como funciona cada código de status de redirecionamento HTTP é crucial para diagnosticar ou corrigir erros de configuração do site.

Neste guia, vamos cobrir os códigos de status HTTP 307 Temporary Redirect e 307 Internal Redirect em profundidade, incluindo seu significado e como eles diferem dos outros códigos de status 3xx redirecionados.

Vamos começar!

O que é HTTP 307 Temporary Redirect?

A Internet Engineering Task Force (IETF) define o 307 Temporary Redirect como:

O código de status 307 (Temporary Redirect) indica que o recurso alvo reside temporariamente sob 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 efetiva original para solicitações futuras.

Como funciona o Redirecionamento HTTP 3xx

Antes de mergulharmos no HTTP 307 Redirecionamento Temporário e 307 Redirecionamento Interno, vamos entender como funciona o redirecionamento HTTP.

Os códigos de status HTTP são respostas do servidor para o navegador. Cada código de status é um número de três dígitos, e o primeiro dígito define que tipo de resposta é. Os códigos de status HTTP 3xx implicam em um redirecionamento. Eles comandam o navegador para redirecionar para uma nova URL, que é definida no cabeçalho Location da resposta do servidor.

Redirecionamentos HTTP 3xx no trabalho
Redirecionamentos HTTP 3xx no trabalho

Quando seu navegador encontra uma solicitação de redirecionamento do servidor, ele precisa entender a natureza dessa solicitação. Os diversos códigos de status do redirecionamento HTTP 3xx tratam dessas requisições. Conhecer todos eles nos ajudará a entender melhor o 307 Redirecionamento Temporário e o 307 Redirecionamento Interno.

Confira nosso guia em vídeo para o Redirecionamento Temporário 307 e para todos os Redirecionamentos 3xx

As Várias Redireções HTTP 3xx

Existem vários tipos de códigos de status HTTP 3xx redirecionados. A especificação original do HTTP não incluía 307 Redirecionamento Temporário e 308 Redirecionamento Permanente, pois estas funções deveriam ser preenchidas por 301 Movidos Permanentemente e 302 Encontrados.

Entretanto, a maioria dos clientes mudou o método de requisição HTTP de POST para GET para 301 e 302 redirecionar respostas, apesar da especificação HTTP não permitir que os clientes o façam. Este comportamento exigiu a introdução dos códigos mais rígidos HTTP 307 Temporary Redirect e 308 Permanent Redirect status na atualização HTTP/1.1.

A 307 Resposta Interna Redireta é uma variante do código de status 307 Temporary Redirect. Ele não é definido pelo padrão HTTP e é apenas uma implementação de um navegador local. Discutiremos isso mais tarde com mais detalhes.

Enquanto códigos de status redirecionados como 301 e 308 são armazenados em cache por padrão, outros como 302 e 307 não são. Entretanto, você pode tornar todas as respostas redirecionáveis em cache (ou não), adicionando um campo Cache-Control ou Expires response header.

Os redirecionamentos HTTP não são tão complexos
Os redirecionamentos HTTP não são tão complexos

Usando 302 vs 303 vs 307 para Redirecionamentos Temporários

Como visto no gráfico acima, para redirecionamentos temporários, você tem três opções: 302, 303, ou 307. Entretanto, a maioria dos clientes trata o código de status 302 como uma resposta 303 e muda o método de requisição HTTP para GET. Isto não é o ideal do ponto de vista de segurança.

RFC 1945 e RFC 2068 especificam que o cliente não está autorizado a alterar o método na solicitação redirecionada. Entretanto, a maioria das implementações de agentes de usuário existentes tratam o 302 como se fosse uma resposta 303, realizando um GET sobre o valor do campo Localização independentemente do método da requisição original. Os códigos de status 303 e 307 foram adicionados para servidores que desejam deixar claro, sem ambigüidade, qual tipo de reação é esperada do cliente.
HTTP/1.1. Definições dos códigos de status, W3.org

Assim, para redirecionamentos temporários onde você precisa manter o método de requisição HTTP, utilize a resposta mais rígida HTTP 307 Temporary Redirect.

Por exemplo, redirecionamento /register-form.html para signup-form.html, ou de /login.php para /signin.php.

Para casos em que você precisa alterar o método de solicitação de redirecionamento para GET, use o 303 Veja Outra resposta em seu lugar.

Por exemplo, redirecionando uma solicitação POST da página /register.php para carregar uma página /success.html via solicitação GET.

A menos que seu público-alvo utilize clientes antigos, evite utilizar a resposta redirecionada do 302 Found.

Entendendo HTTP 307 Redirecionamento Interno para Sites somente HTTPS

Se você tem um site somente HTTPS (que você deve), quando você tenta visitá-lo de forma insegura via http://, seu navegador será automaticamente redirecionado para a sua versão segura https://. Normalmente, isso acontece com um 301 Moved Permanently redirecionamento permanente de resposta do servidor.

Por exemplo, se você visitar http://citibank.com e carregar o DevTools no Chrome e selecionar a aba Rede, você pode ver todas as solicitações feitas entre o navegador e o servidor.

A primeira resposta é 301 Moved Permanently, que redireciona o navegador para a versão HTTPS do site.

301 redirecionamentos de resposta para a versão HTTPS
301 redirecionamentos de resposta para a versão HTTPS

Se formos mais fundo nos campos Cabeçalhos da primeira solicitação, podemos ver que o cabeçalho de resposta de Localização define qual é a URL segura para o redirecionamento.

O cabeçalho de resposta de localização define a URL de redirecionamento
O cabeçalho de resposta de localização define a URL de redirecionamento

O problema com esta abordagem é que atores maliciosos podem seqüestrar a conexão de rede para redirecionar o navegador para uma URL personalizada. Ataques Man-in-the-Middle (MITM) como este são bastante comuns. Uma série de TV popular até falsificou isso em um de seus episódios.

Além disso, uma parte maliciosa pode lançar um ataque MITM sem alterar a URL mostrada na barra de endereços do navegador. Por exemplo, o usuário pode ser servido a uma página de phishing que se parece exatamente com o site original.

E como tudo parece igual, inclusive a URL na barra de endereços, a maioria dos usuários terá prazer em digitar suas credenciais. Você pode imaginar porque isso pode ser ruim.

301 redirecionamentos para HTTPS não são seguros
301 redirecionamentos para HTTPS não são seguros

Redirecionamentos Seguros com HTTP 307 Redirecionamentos Internos

Agora, vamos tentar o mesmo exemplo com Kinsta. Visitar https://kinsta.com leva a solicitações de rede como mostrado na captura de tela abaixo.

Um exemplo de 307 Redirecionamento Interno
Um exemplo de 307 Redirecionamento Interno

O primeiro pedido do site é como o exemplo anterior, mas desta vez leva a uma resposta de 307 Redirecionamento Interno. Clicando sobre ele, mais detalhes sobre esta resposta serão mostrados.

Nota: Se você tentar visitar o site diretamente com https://, você não verá este cabeçalho, pois o navegador não precisa realizar nenhum redirecionamento.

Cabeçalhos de resposta da 307 Resposta Interna Redirecionada
Cabeçalhos de resposta da 307 Resposta Interna Redirecionada

Observe a Razão Não Autoritária: cabeçalho de resposta do HSTS. Este é o header de resposta Strict Transport Security (HSTS) do HTTP, também conhecido como cabeçalho de resposta Strict-Transport-Security.

O que é o HSTS (Strict Transport Security)?

A IETF ratificou o HTTP Strict Transport Security (HSTS) em 2012 para forçar os navegadores a usar conexões seguras quando um site estiver rodando estritamente em HTTPS.

Isto é semelhante ao que diz Chrome ou Firefox: “Eu não vou nem tentar solicitar este site ou qualquer um de seus recursos sobre o inseguro protocolo HTTP”. Ao invés disso, vou mudá-lo para HTTPS e tentar novamente”.

Você pode seguir o guia da Kinsta sobre como habilitar o HSTS para colocá-lo em funcionamento no seu site WordPress.

Melhor segurança com 307 Redirecionamento Interno de Resposta
Melhor segurança com 307 Redirecionamento Interno de Resposta

Aprofundar no cabeçalho de resposta da segunda solicitação nos dará uma melhor compreensão.

Verificando o cabeçalho de resposta do HSTS
Verificando o cabeçalho de resposta do HSTS

Aqui, você pode ver o cabeçalho de resposta strict-transport-security: max age=31536000.

O atributo de idade máxima do cabeçalho de resposta strict-transport-security define por quanto tempo o navegador deve seguir este padrão. No exemplo acima, este valor é definido para 3153600 segundos (ou 1 ano).

Uma vez que um site retorna este cabeçalho de resposta, o navegador nem sequer tentará fazer uma requisição HTTP comum. Ao invés disso, ele fará um Redirecionamento Interno 307 para HTTPS e tentará novamente.

Toda vez que este processo se repete, os cabeçalhos de resposta são zerados. Assim, o navegador não poderá fazer uma solicitação insegura por um período indefinido.

Se você hospeda seu site com Kinsta, você pode criar um ticket de suporte para ter o cabeçalho do HSTS adicionado ao seu site WordPress. Como a adição do cabeçalho HSTS garante benefícios de desempenho, é recomendado que você ative o HSTS para o seu site.

O que é uma lista de pré-carga do HSTS?

Além disso, o cabeçalho de resposta do HSTS pode ser enviado apenas sobre HTTPS, de modo que o pedido inicial inseguro não pode sequer ser devolvido.

Para resolver este problema, o HSTS suporta um atributo de pré-carga em seu cabeçalho de resposta. A idéia é ter uma lista de sites que fazem com que o HSTS seja pré-carregado no próprio navegador, contornando completamente esta questão de segurança.

Ao adicionar seu site à lista de pré-carga do HSTS do navegador, você saberá que seu site impõe uma política rígida do HSTS, mesmo que esteja visitando seu site pela primeira vez. O navegador então utilizará a resposta 307 do Redirecionamento Interno para redirecionar seu site para seu esquema seguro https:// antes de solicitar qualquer outra coisa.

Você deve observar que ao contrário do 307 Temporary Redirect, a resposta do 307 Internal Redirect é um “cabeçalho falso” definido pelo próprio navegador. Não vem do servidor, do servidor web (por exemplo, Kinsta), ou do CMS (por exemplo, WordPress).

Adicionar um site a uma lista de pré-carga do HSTS tem muitas vantagens:

  1. O servidor web nunca vê solicitações HTTP inseguras. Isso reduz a carga do servidor e torna o site mais seguro.
  2. O navegador cuida do redirecionamento do HTTP para HTTPS, tornando o site mais rápido e seguro.

Requisitos da Lista de Pré-carga do HSTS

Se você quiser adicionar seu site à lista de pré-carga do HSTS de um navegador, ele precisa verificar as seguintes condições:

  • Tenha um certificado SSL/TLS válido instalado para o seu domínio.
  • Aplicar HTTPS rigoroso redirecionando todo o tráfego HTTP para HTTPS.
  • Todos os subdomínios devem ser servidos sobre HTTPS, especificamente o subdomínio www, caso exista um registro DNS para esse subdomínio.
  • O seu domínio base deve incluir um cabeçalho HSTS com os seguintes atributos:
    • O atributo de idade máxima deve ser definido por pelo menos 31536000 segundos (1 ano).
    • As diretrizes includeSubdomains e preload devem ser especificadas.
    • Se você estiver servindo um redirecionamento adicional, ele deve incluir o cabeçalho do HSTS, não a página para a qual ele é redirecionado.

Adicionando seu site à lista de pré-carga do HSTS

Envio da lista de pré-carga do HSTS
Envio da lista de pré-carga do HSTS

Existem duas maneiras de adicionar seu site à lista de pré-carga do HSTS.

  1. Enviando seu site para um diretório de lista de pré-carga do HSTS. Por exemplo, a lista master dohstspreload.org é mantida pelo projeto Chromium open source e é utilizada pela maioria dos principais navegadores (Firefox, Chrome, Safari, IE 11 e Edge).
  2. Ao adicionar o seguinte campo de cabeçalho ao seu site:

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

Com o segundo método, a primeira visita ao seu site pelo navegador não será totalmente segura. No entanto, as visitas subsequentes serão totalmente seguras.

Exemplo da lista de pré-carga do HSTS da Mozilla
Exemplo da lista de pré-carga do HSTS da Mozilla

Você pode usar uma ferramenta online gratuita como Security Headers para verificar se o seu site está ou não aplicando o HSTS. Se você está preocupado com o suporte do navegador ao HSTS, você pode ficar tranquilo sabendo que o HSTS é suportado por quase todos os navegadores em uso hoje em dia.

HSTS goza de amplo suporte em todos os principais navegadores
HSTS goza de amplo suporte em todos os principais navegadores

HTTP 307 Redirecionamentos e SEO

Como uma resposta de 307 Redirecionamento Temporário mostra que o recurso mudou temporariamente para uma nova URL, os mecanismos de busca não atualizam seu índice para incluir essa nova URL. O ‘link-juice’ da URL original não é passado para a nova URL.

Isso contrasta com o 301 Moved Permanently redireciona, onde os mecanismos de busca atualizam seu índice para incluir a nova URL e passam o ‘link-juice’ da URL original para a nova URL.

Com uma resposta de 307 Redirecionamento Interno, tudo acontece no nível do navegador. Portanto, não deve ter efeito direto no SEO do seu site. No entanto, adicionar seu site a uma lista de pré-carga do HSTS faz com que ele carregue mais rápido e seja mais seguro, o que pode ajudá-lo a subir na classificação nos resultados de busca.

Tenha cuidado para não redirecionar inadvertidamente os usuários e bots para um loop infinito de redirecionamento, causando o erro de “redirecionamento em excesso“.

Resumo

O redirecionamento de URL permite que você atribua mais de um endereço URL para uma página web. A melhor maneira de lidar com redirecionamentos de URL é no nível do servidor com respostas de código de status HTTP 3xx redirecionado. Se o seu site estiver em baixa para manutenção ou indisponível por outros motivos, você pode redirecioná-lo temporariamente para outra URL com uma resposta de 307 Redirecionamento Temporário.

Dito isto, qualquer redirecionamento acrescenta atraso ao tempo de carregamento da sua página. Portanto, use os redirecionamentos judiciosamente mantendo sempre em mente a experiência do usuário final.