Estou depurando um problema com um redirecionamento permanente HTTP 301. Após um teste rápido, parece que o Safari limpa seu cache de 301s quando é reiniciado, mas o Firefox não.
Quando o IE, Chrome, Firefox e Safari limpam o cache de 301s?
ATUALIZAÇÃO: Por exemplo, se eu quiser redirecionar example1.com
para example2.com
, mas acidentalmente o defino para redirecionar para example3.com
, isso é um problema. Posso corrigir o erro, mas quem já visitou example1.com
o cache de redirecionamentos incorretos em cache e example3.com
, portanto, não poderá acessar example1.com
ou example2.com
até que seu cache seja limpo. Após a investigação, acho que não havia Cache-Control
e Expires
cabeçalhos definidos. Os cabeçalhos da resposta 301 incorreta teriam sido assim:
HTTP/1.1 301 Moved Permanently
Date: Wed, 27 Feb 2013 12:05:53 GMT
Server: Apache/2.2.21 (Unix) DAV/2 PHP/5.3.8
X-Powered-By: PHP/5.3.8
Location: http://example3.com/
Content-Type: text/html
Meus próprios testes mostram que:
- IE7, IE8, Android 2.3.4 não fazem cache de todo.
- Firefox 18.0.2, Safari 5.1.7 (no Windows 7) e Opera 12.14 todos armazenam em cache e limpe o cache na reinicialização do navegador.
- IE10 e Chrome 25, mas não são limpos na reinicialização do navegador; portanto , quando eles serão limpos?
Respostas:
Pelo menos dois navegadores - Chrome e Firefox - armazenarão em cache um redirecionamento 301 sem data de validade .
Ou seja, ele permanecerá em cache enquanto o cache do navegador puder acomodá-lo. Ele será removido do cache se você limpá-lo manualmente ou se as entradas do cache forem limpas para liberar espaço para novas.
Você pode verificar isso pelo menos no Firefox, indo
about:cache
e localizando-o no cache do disco.Não sei o comportamento de outros navegadores, como o IE10 / IE11. No entanto, considerando que outros navegadores o armazenam em cache indefinidamente, você precisará acomodar isso de qualquer maneira.
Em todos os navegadores, incluindo o Chrome / Firefox, ainda é possível substituir esse comportamento padrão usando cabeçalhos, conforme descrito abaixo:
Nota: esta resposta foi escrita em 2014 e o comportamento do navegador pode mudar com o tempo.
Se você não deseja que o redirecionamento seja armazenado em cache
Esse cache indefinido é apenas o cache padrão desses navegadores na ausência de cabeçalhos de controle de cache. A lógica é que você está especificando um redirecionamento "permanente" e não fornecendo outras instruções de armazenamento em cache, para tratá-lo como se você quisesse que ele fosse armazenado em cache indefinidamente.
Os navegadores ainda respeitam os cabeçalhos de controle de cache e expira como com qualquer outra resposta, se eles forem especificados.
Você pode adicionar cabeçalhos como
Cache-Control: max-age=3600
ouExpires: Thu, 01 Dec 2014 16:00:00 GMT
aos seus redirecionamentos 301. Você pode até adicionarCache-Control: no-cache
para que ele não seja armazenado em cache permanentemente pelo navegador ouCache-Control: no-store
para que ele não possa ser armazenado em armazenamento temporário pelo navegador.Uma alternativa melhor na minha opinião, no entanto, é usar um redirecionamento 302 ou 307. Isso não implica que os navegadores ou caches sejam redirecionamentos "permanentes" e, portanto, não devem ser armazenados em cache na ausência de cabeçalhos de controle de cache.
Para mim, parece que emitir um redirecionamento 301, mas marcá-lo como não armazenável em cache está indo contra o espírito do que é um redirecionamento 301, mesmo que seja tecnicamente válido. YMMV, e você pode encontrar casos extremos onde faz sentido que um redirecionamento "permanente" tenha um limite de tempo.
Se você emitiu anteriormente um redirecionamento 301, mas deseja cancelar a execução
Se as pessoas ainda tiverem o redirecionamento 301 em cache no navegador, elas continuarão sendo direcionadas para a página de destino, independentemente de a página de origem ainda ter o redirecionamento no lugar. Suas opções para corrigir isso incluem:
A solução mais simples e melhor é emitir outro redirecionamento 301 novamente.
O navegador perceberá que está sendo direcionado de volta para o que anteriormente pensava ser um URL desativado, e isso deve fazer com que o URL seja buscado novamente novamente para confirmar que o redirecionamento antigo ainda não está lá.
Edit: alguns comentários lançam dúvidas sobre isso, veja abaixo.
Se você não tiver controle sobre o site para onde foi o destino de redirecionamento anterior, estará sem sorte. Tente e implore ao proprietário do site para redirecionar de volta para você.
Também prevenir é melhor do que remediar - evite um redirecionamento 301 se não tiver certeza de que deseja desativar permanentemente o URL antigo.
fonte
http://www.SOMEHOST.com
ahttps://www.SOMEHOST.com
. Mas agorahttp://www.SOMEHOST.com
deve ser o host principal do site. Então, redirecione de https para http removido. Como você mostra, fiz redirecionamento 301 dehttps://www.SOMEHOST.com
parahttp://www.SOMEHOST.com
, mas veja loop. Navegador não re-buscar ...Do Chrome 71
Para limpar um redirecionamento permanente, acesse chrome: // settings / clearBrowserData e, a partir daí, apenas a limpeza de "imagens e arquivos em cache" limpou o redirecionamento.
Chrome 48-70
Vá para chrome: // net-internals. À direita da barra de status vermelha superior, clique na seta para baixo ▼ para abrir o menu suspenso e, no grupo "Ferramentas", escolha "Limpar cache".
A partir da versão 48, essa era a única coisa que funcionava para limpar um 301 em cache.
fonte
Uma resposta que ajuda aqueles que desejam desesperadamente se livrar do cache de redirecionamento:
O Chrome armazena em cache o redirecionamento 301 infinitamente (no cache do disco local). Para limpar esse cache:
F12
)F5
)Quando tudo estiver correto, você pode desmarcar a opção "Desativar cache" e tudo continuará funcionando conforme o esperado.
fonte
localhost:8000
paralocalhost
(porta 80). Também limpei todos os dados do site / aplicativo do localhost e localhost: 8000, mas isso também não ajudou.Faça o usuário enviar um formulário de postagem nesse URL e o redirecionamento em cache desaparecerá :)
fonte
301
é uma resposta armazenável em cache por RFC HTTP e os navegadores o armazenam em cache, dependendo dos cabeçalhos de cache HTTP que você possui na resposta. Use o FireBug ou Charles para examinar os cabeçalhos de resposta para saber a duração exata pela qual a resposta será armazenada em cache.Se você deseja controlar a duração do armazenamento em cache, pode usar os cabeçalhos de resposta HTTP
Cache-Control
eExpires
fazer o mesmo. Como alternativa, se você não deseja armazenar em cache a301
resposta, use os seguintes cabeçalhos.fonte
Existe uma maneira muito simples de remover o cache do navegador para redirecionamentos http, por exemplo, 301, 307 etc.
Você pode abrir o painel de rede no console do desenvolvedor no chrome. Selecione a chamada de rede. Clique com o botão direito do mouse e, em seguida, clique em Limpar cache do navegador para remover o redirecionamento em cache.
fonte
Confirmado!! faça o usuário enviar uma solicitação de postagem para o URL afetado e o redirecionamento em cache será esquecido.
Uma vitória rápida seria inseri-la no console do navegador se você puder:
fetch('example.com/affected/link', {method: 'post'}).then(() => {})
Útil se você conhece o navegador afetado (especialmente durante o desenvolvimento).
Como alternativa , se você tiver acesso à página de redirecionamento 301 anterior, poderá adicionar esse script à página e sempre que for visitada, o 301 em cache será esquecido.
fonte
Vou postar uma resposta que me ajudou:
vá para o URL:
deve chamar pop-up e depois ..
cached images and files
.from beginning
fonte
como resposta de @thomasrutter
De fato, isso significa:
a.com 301 para b.com
excluir 301 de a.com
adicione b.com 301 a a.com
Então funciona.
fonte
a.com
301 -> b.com) (excluira.com
301) (adicionea.com/abcdefg
301 ->a.com
) e forçar o cliente a visualizar dea.com/abcdefg
alguma forma?Eu tenho uma solução simples que funcionou em todos os principais navegadores (versão mais recente), inclui IE, Chrome e FF
fonte
Para fins de teste (para evitar redirecionamentos em cache), as pessoas podem abrir a NOVA JANELA PRIVADA : clique em
CTRL+SHIFT+
N
[se você usa o Mozilla, useP
]fonte
Teste seus redirecionamentos usando o modo de navegação anônima / InPrivate; assim, quando você fechar o navegador, ele liberará esse cache e a reabertura da janela não conterá o cache.
fonte
Como as outras respostas mostram. O cache pode estar indefinidamente no navegador. Isso é extremamente perigoso. Então não faça isso. Pelo menos adicione cabeçalhos de cache. No htaccess, eu sempre faço desta maneira com o cache agora:
fonte
Para resolver o problema de um endereço de host local, alterei o número da porta em que o site era executado. Isso funcionou na versão 73.0.3683.86 do Chrome.
fonte
Na versão 79 do Google Chrome mais recente, você pode usar o chrome: // net-internals, selecionar DNS no painel esquerdo e tocar no botão Limpar cache do host
fonte