Combien de temps les navigateurs cache-t-il HTTP 301s?

je corrige un problème avec une redirection permanente de HTTP 301. Après un test rapide, il semble que Safari efface sa cache de 301s lorsqu'elle est redémarrée, Mais Pas Firefox.

quand IE, Chrome, Firefox et Safari vident - ils leur cache de 301s?

mise à JOUR: Par exemple, si je veux rediriger example1.com à example2.com , mais j'ai accidentellement mis à rediriger vers example3.com , qui est un problème. Je peux corriger l'erreur, mais n'importe qui qui a visité example1.com dans l'intervalle aura mis en cache la redirection incorrecte à example3.com , et donc ils ne seront pas en mesure d'atteindre soit example1.com ou example2.com jusqu'à ce que leur cache est nettoyé. Après enquête, je constate qu'il n'y avait pas de sous-titres Cache-Control et Expires . Les en-têtes de la réponse incorrecte 301 auraient été comme ceci:

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

mes propres tests montrent que:

  • IE7, IE8, Android 2.3.4 ne pas mettre en cache du tout.
  • Firefox 18.0.2, Safari 5.1.7 (sur Windows 7), et Opera 12.14 tout le cache, et effacer le cache sur le redémarrage du navigateur.
  • cache IE10 et Chrome 25, mais ne s'effacent pas lors du redémarrage du navigateur, alors quand s'effaceront-ils?
242
demandé sur Liam 2012-02-03 18:42:50

9 réponses

au moins deux navigateurs - Chrome et Firefox - vont mettre en cache une redirection 301 avec sans date d'expiration .

C'est-à-dire qu'il restera caché aussi longtemps que le cache du navigateur pourra le contenir. Il sera supprimé du cache si vous effacer le cache manuellement, ou si les entrées du cache sont supprimés afin de libérer de l'espace.

vous pouvez vérifier cela au moins dans Firefox en allant à about:cache et le trouver sous la cache de disque.

Je ne sais rien du comportement des autres navigateurs, comme IE10/IE11. Cependant, étant donné que d'autres navigateurs ne cache indéfiniment, vous aurez à accommoder pour cela de toute façon.

dans tous les navigateurs, y compris Chrome/Firefox, il est encore possible de modifier ce comportement par défaut en utilisant des en-têtes, comme décrit ci-dessous:

Note: Cette réponse a été écrite en 2014 et le navigateur le comportement peut changer avec le temps.

si vous ne voulez pas que la redirection soit mise en cache

cette mise en cache indéfinie n'est que la mise en cache par défaut par ces navigateurs en l'absence d'en-têtes de contrôle de Cache. La logique est que vous spécifiez une redirection" permanente " et que vous ne leur donniez pas d'autres instructions de mise en cache, donc ils la traiteront comme si vous la vouliez mise en cache indéfiniment.

les navigateurs honorent toujours les en-têtes Cache-Control et Expires comme avec toute autre réponse, s'ils sont spécifiés.

vous pouvez ajouter des en-têtes tels que Cache-Control: max-age=3600 ou Expires: Thu, 01 Dec 2014 16:00:00 GMT à vos 301 redirections. Vous pouvez même ajouter Cache-Control: no-cache pour qu'il ne soit pas mis en cache de façon permanente par le navigateur ou Cache-Control: no-store pour qu'il ne puisse même pas être stocké dans un stockage temporaire par le navigateur.

Une meilleure solution, à mon avis, cependant, est d'utiliser un 302 ou 307 rediriger. Ceux-ci n'impliquent pas pour les navigateurs ou les caches qu'ils sont des redirections "permanentes" et ne devraient donc pas être mis en cache dans l'absense des en-têtes de contrôle de Cache.

pour moi, il me semble que l'émission d'une redirection 301 mais la marquer comme non-cachable va à l'encontre de l'esprit de ce qu'est une redirection 301, même si elle peut être techniquement valide. YMMV, et vous pouvez trouver des cas de bord où il est logique pour une redirection" permanente " d'avoir une limite de temps.

si vous avez déjà émis une redirection 301 mais que vous voulez annuler cette redirection

si les gens ont toujours la redirection 301 en cache dans leur navigateur, ils continueront à être amenés à la page cible indépendamment du fait que la page source a toujours la redirection en place. Vous avez le choix entre:

  • la solution la plus simple et la meilleure est de publier un autre 301 rediriger à nouveau.

    le navigateur réalisera qu'il est dirigé vers ce QU'il pensait être une URL désactivée, et cela devrait l'amener à récupérer cette URL à nouveau pour confirmer que l'ancienne redirection n'est pas encore là.

    Edit: quelques commentaires jeter le doute sur cette question, voir ci-dessous.

  • si vous n'avez pas le contrôle sur le site où la cible de redirection précédente est allé, alors vous êtes outta chance. Essayez et prie le propriétaire du site pour rediriger vers vous.

mieux vaut prévenir que guérir - évitez une redirection 301 si vous n'êtes pas sûr de vouloir désactiver définitivement l'ancienne URL.

223
répondu thomasrutter 2016-12-12 00:53:23

pour effacer une redirection permanente, allez à chrome://net-internals. Sur la droite de la barre d'état rouge supérieure, cliquez sur la flèche descendante ▼ pour ouvrir le menu déroulant, et sous le groupe "Outils", choisissez "Effacer le cache".

à partir de la version 48, c'était la seule chose qui fonctionnait pour moi pour nettoyer un cache 301.

179
répondu McGuireV10 2016-11-27 08:05:50

301 est une réponse qui peut être mise en cache par HTTP RFC et les navigateurs vont la mettre en cache en fonction des en-têtes de mise en cache HTTP que vous avez sur la réponse. Utilisez FireBug ou Charles pour examiner les en-têtes de réponse pour savoir la durée exacte de la réponse sera caché.

si vous souhaitez contrôler la durée de la mise en cache, vous pouvez utiliser les en-têtes de réponse HTTP Cache-Control et Expires pour faire la même chose. Alternativement, si vous ne voulez pas mettre en cache le 301 réponse à tout, utiliser les en-têtes suivants.

Cache-Control: no-store, no-cache, must-revalidate
Expires: Thu, 01 Jan 1970 00:00:00 GMT
19
répondu Alex J 2012-02-23 14:30:03

une réponse qui aide ceux qui veulent désespérément se débarrasser du cache de redirection:

Chrome cache la 301 redirection à l'infini, ou jusqu'à ce que vous ouvrez vos DevTools, vérifiez le cache désactivé (alors que DevTools est ouvert), et rechargez la page .

cela a fonctionné pour moi dans Chrome 39, mais malheureusement pas pour localhost.

14
répondu Olaf 2014-11-27 16:46:53

permettre à l'utilisateur de soumettre un formulaire post sur l'url et la mise en cache de redirection est parti :)

<body onload="document.forms[0].submit()">
<form action="https://forum.pirati.cz/unreadposts.html" method="post">
    <input type="submit" value="fix" />
</form>
</body>
10
répondu Krtek Net 2017-05-13 06:39:58

j'ai solution simple qui a fonctionné sur tous les principaux navigateurs (dernière version), y compris IE, Chrome et FF

  1. Ctrl + Maj + Suppr
  2. -
    1. Chrome: sélectionnez" Historique de navigation "et" Cache..."
    2. IE: je laisse l'option par défaut "Fichiers Internet temporaires et les fichiers de site web", "Cookies et données de site web"," histoire "
    3. FF: "historique de navigation et de téléchargement"," Cache "
  3. Cliquez Sur "Supprimer"
  4. Fermez et rouvrez votre navigateur. Il devrait fonctionner
5
répondu Dung Le 2018-06-26 15:13:29

comme réponse de @thomasrutter

si vous avez déjà émis une redirection 301 mais que vous voulez annuler cette redirection

si les gens ont toujours la redirection 301 en cache dans leur navigateur, ils continueront à être amenés à la page cible indépendamment du fait que la page source a toujours la redirection en place. Vous avez le choix entre:

le plus simple et Le meilleur la solution est de publier un autre 301 rediriger à nouveau.

le navigateur réalisera qu'il est redirigé vers ce qu'il pensait être une URL désactivée, et cela devrait le faire re-fetch cette URL à nouveau pour confirmer que l'ancienne redirection n'est pas encore là.

si vous n'avez pas le contrôle sur le site où la cible de redirection précédente est allée, alors vous n'avez pas de chance. Essayez et prie le propriétaire du site pour rediriger vers vous.

en fait, cela signifie:

  1. a.com 301 à b.com

  2. supprimer a.com" s 301

  3. ajouter b.com 301 à a.com

alors ça marche.

4
répondu phil han 2016-03-31 06:43:04

à des fins de test (donc, pas de redirections en cache), les gens peuvent ouvrir nouvelle fenêtre privée : cliquez CTRL+SHIFT+ N [ou P ]

3
répondu T.Todua 2016-11-15 19:03:04

Testez vos redirections en utilisant le mode incognito/InPrivate de sorte que lorsque vous fermez le navigateur, il va vider ce cache et la réouverture de la fenêtre ne contiendra pas le cache.

0
répondu yougotiger 2018-03-22 22:29:44