En l'absence de directives de contrôle du cache qui spécifient le contraire, une redirection 301 est mise en cache par défaut sans date d'expiration.
C'est-à-dire qu'il restera en mémoire cache aussi longtemps que le cache du navigateur pourra l'accueillir. Il sera supprimé du cache si vous videz manuellement le cache ou si les entrées du cache sont purgées pour faire place à de nouvelles entrées.
Vous pouvez le vérifier, au moins dans Firefox, en allant à l'adresse suivante about:cache
et le trouver dans le cache du disque. Cela fonctionne de la même manière dans d'autres navigateurs, y compris Chrome et Edge, basé sur Chromium, bien qu'ils ne disposent pas d'une fonction de recherche dans la mémoire cache. about:cache
pour inspecter le cache.
Dans tous les navigateurs, il est toujours possible de passer outre ce comportement par défaut en utilisant des directives de mise en cache, comme décrit ci-dessous :
Si vous ne voulez pas que la redirection soit mise en cache
Cette mise en mémoire indéfinie n'est que le par défaut la mise en cache par ces navigateurs en l'absence d'en-têtes spécifiant le contraire. La logique est que vous spécifiez une redirection "permanente" et que vous ne leur donnez pas d'autres instructions de mise en cache, de sorte qu'ils la traiteront comme si vous vouliez qu'elle soit mise en cache indéfiniment.
Les navigateurs respectent toujours les en-têtes Cache-Control et Expires comme pour toute autre réponse, s'ils sont spécifiés.
Vous pouvez ajouter des en-têtes tels que Cache-Control: max-age=3600
o Expires: Thu, 01 Dec 2014 16:00:00 GMT
à vos redirections 301. Vous pouvez même ajouter Cache-Control: no-cache
afin qu'il ne soit pas mis en cache de façon permanente par le navigateur ou par l'utilisateur. Cache-Control: no-store
donc il ne peut même pas être stocké dans un stockage temporaire par le navigateur.
Toutefois, si vous ne souhaitez pas que votre redirection soit permanente, il est préférable d'utiliser une redirection 302 ou 307. Le fait d'émettre une redirection 301 mais de la marquer comme non cachable va à l'encontre de la politique de confidentialité de l esprit de ce à quoi sert une redirection 301, même si elle est techniquement valide. YMMV, et vous pouvez trouver des cas limites où il est logique pour une redirection "permanente" d'avoir une limite de temps. Notez que les redirections 302 et 307 ne sont pas mises en cache par défaut par les navigateurs.
Si vous avez précédemment émis une redirection 301 mais que vous souhaitez annuler cette opération
Si les internautes ont toujours la redirection 301 en cache dans leur navigateur, ils continueront d'être dirigés vers la page cible, même si la page source a toujours la redirection en place. Vous avez plusieurs possibilités pour résoudre ce problème :
-
Une solution simple consiste à émettre une nouvelle redirection.
Si le navigateur est redirigé vers une même URL une deuxième fois au cours d'une redirection, il doit la récupérer depuis l'origine au lieu de la rediriger à nouveau depuis le cache, afin d'éviter une boucle de redirection. Les commentaires sur cette réponse indiquent que cela fonctionne maintenant dans tous les principaux navigateurs - mais il peut y avoir quelques navigateurs mineurs où ce n'est pas le cas.
-
Si vous n'avez pas le contrôle du site vers lequel la cible de redirection précédente est allée, alors vous n'avez pas de chance. Essayez de supplier le propriétaire du site de vous rediriger vers lui.
Mieux vaut prévenir que guérir - évitez une redirection 301 si vous n'êtes pas sûr de vouloir mettre définitivement hors service l'ancienne URL.
12 votes
S'il vous plaît, dites à Chrome que nous avons besoin d'un moyen de sortir de ce trou de l'enfer 301 : bugs.chromium.org/p/chromium/issues/
0 votes
Comme le problème affecte tous les navigateurs, seul l'IETF pourrait le résoudre, probablement en définissant un délai obligatoire pour les 301 en cache qui n'ont pas de TTL, de sorte que les navigateurs finissent par revérifier leurs hypothèses en cache.
1 votes
J'ai lancé une discussion sur la liste de diffusion de l'IETF à ce sujet, si quelqu'un qui suit encore cette question a envie de s'exprimer : lists.w3.org/Archives/Public/ietf-http-wg/2017OctDec/0363.html