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
ou Expires: Thu, 01 Dec 2014 16:00:00 GMT
aos seus redirecionamentos 301. Você pode até adicionar Cache-Control: no-cache
para que ele não seja armazenado em cache permanentemente pelo navegador ou Cache-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.