Je débogue un problème avec une redirection permanente HTTP 301. Après un test rapide, il semble que Safari vide son cache de 301s lors de son redémarrage, mais pas Firefox.
Quand IE, Chrome, Firefox et Safari effacent-ils leur cache de 301?
MISE À JOUR: Par exemple, si je veux rediriger example1.com
vers example2.com
, mais que je l'ai accidentellement défini pour rediriger vers example3.com
, c'est un problème. Je peux corriger l'erreur, mais toute personne ayant visité example1.com
entre-temps aura mis en cache la redirection incorrecte example3.com
et ne pourra donc pas atteindre l'un example1.com
ou l' autre example2.com
jusqu'à ce que son cache soit vidé. Après enquête, je constate qu'il n'y avait pas d'en Cache-Control
- Expires
tête et que des en- têtes ont été définis. Les en-têtes pour la réponse 301 incorrecte 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 sont pas du tout mis en cache.
- Firefox 18.0.2, Safari 5.1.7 (sous Windows 7) et Opera 12.14 tous les caches et vider le cache au redémarrage du navigateur.
- IE10 et le cache Chrome 25, mais ne s'effacent pas au redémarrage du navigateur, alors quand seront-ils effacés?
Réponses:
Au moins deux navigateurs - Chrome et Firefox - mettront en cache une redirection 301 sans date d'expiration .
Autrement dit, il restera mis en cache aussi longtemps que le cache du navigateur pourra le contenir. Il sera supprimé du cache si vous videz manuellement le cache ou si les entrées du cache sont purgées pour faire de la place pour les nouvelles.
Vous pouvez le vérifier au moins dans Firefox en allant
about:cache
dans le cache disque et en le trouvant.Je ne connais pas le comportement d'autres navigateurs, tels que IE10 / IE11. Cependant, étant donné que d'autres navigateurs le mettent en cache indéfiniment, vous devrez quand même vous en occuper.
Dans tous les navigateurs, y compris Chrome / Firefox, il est toujours possible de remplacer ce comportement par défaut à l'aide des en-têtes, comme décrit ci-dessous:
Remarque: cette réponse a été écrite en 2014 et le comportement du navigateur peut changer au fil du temps.
Si vous ne souhaitez pas que la redirection soit mise en cache
Cette mise en cache indéfinie n'est que la mise en cache par défaut de ces navigateurs en l'absence d'en-têtes Cache-Control. La logique est que vous spécifiez une redirection "permanente" et que vous ne leur donnez aucune autre instruction de mise en cache, donc ils la traiteront comme si vous vouliez la mettre 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
ouExpires: Thu, 01 Dec 2014 16:00:00 GMT
à vos redirections 301. Vous pouvez même ajouterCache-Control: no-cache
afin qu'il ne soit pas mis en cache en permanence par le navigateur ouCache-Control: no-store
qu'il ne puisse même pas être stocké dans un stockage temporaire par le navigateur.Une meilleure alternative à mon avis, cependant, consiste à utiliser une redirection 302 ou 307. Ceux-ci n'impliquent pas pour les navigateurs ou les caches qu'il s'agit de redirections "permanentes" et ne doivent donc pas être mis en cache en l'absence des en-têtes Cache-Control.
Pour moi, cela semble émettre une redirection 301, mais le marquer comme non-cache 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 limites où il est logique qu'une redirection "permanente" ait une limite de temps.
Si vous avez précédemment émis une redirection 301 mais que vous souhaitez annuler cette opération
Si les gens ont toujours la redirection 301 mise en cache dans leur navigateur, ils continueront d'être dirigés vers la page cible, que la page source ait toujours la redirection en place. Vos options pour résoudre ce problème incluent:
La solution la plus simple et la meilleure consiste à renvoyer une autre redirection 301.
Le navigateur se rendra compte qu'il est redirigé vers ce qu'il pensait précédemment être une URL déclassée, ce qui devrait le faire récupérer à nouveau cette URL pour confirmer que l'ancienne redirection n'est pas encore là.
Edit: certains commentaires jettent un doute là-dessus, voir ci-dessous.
Si vous ne contrôlez pas le site vers lequel la cible de redirection précédente est allée, vous avez de la chance. Essayez de demander au propriétaire du site de vous rediriger vers vous.
Aussi, 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.
la source
http://www.SOMEHOST.com
vershttps://www.SOMEHOST.com
. Maishttp://www.SOMEHOST.com
doit maintenant être l'hôte principal du site. Donc, redirigez de https vers http supprimé. Comme vous le montrez, j'ai fait rediriger 301 dehttps://www.SOMEHOST.com
vershttp://www.SOMEHOST.com
, mais voir la boucle. Le navigateur n'a pasDepuis Chrome 71
Pour effacer une redirection permanente, accédez à chrome: // settings / clearBrowserData et à partir de là, uniquement la suppression des "images et fichiers mis en cache" a effacé la redirection.
Chrome 48-70
Accédez à chrome: // net-internals. À droite de la barre d'état rouge supérieure, cliquez sur la flèche vers le bas ▼ pour ouvrir le menu déroulant, et sous le groupe "Outils", choisissez "Vider le cache".
À partir de la version 48, c'était la seule chose qui fonctionnait pour moi pour effacer un 301 mis en cache.
la source
Une réponse qui aide ceux qui veulent désespérément se débarrasser du cache de redirection:
Chrome met en cache la redirection 301 à l'infini (dans le cache disque local). Pour vider ce cache:
F12
)F5
)Lorsque tout va bien, vous pouvez décocher "Désactiver le cache" et tout continuera à fonctionner comme prévu.
la source
localhost:8000
tolocalhost
(port 80). J'ai également effacé toutes les données de site / application de localhost et localhost: 8000, mais cela n'a pas non plus aidé.Demandez à l'utilisateur de soumettre un formulaire de publication sur cette URL et la redirection en cache a disparu :)
la source
301
est une réponse pouvant être mise en cache par RFC HTTP et les navigateurs la mettront 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 connaître la durée exacte de la mise en cache de la réponse.Si vous souhaitez contrôler la durée de mise en cache, vous pouvez utiliser les en-têtes de réponse HTTP
Cache-Control
etExpires
faire de même. Sinon, si vous ne voulez pas du tout mettre en cache la301
réponse, utilisez les en-têtes suivants.la source
Il existe un moyen très simple de supprimer le cache du navigateur pour les redirections http, par exemple 301, 307, etc.
Vous pouvez ouvrir le panneau réseau dans la console développeur en chrome. Sélectionnez l'appel réseau. Faites un clic droit dessus, puis cliquez sur Vider le cache du navigateur pour supprimer la redirection mise en cache.
la source
Confirmé!! obliger l'utilisateur à soumettre une demande de publication à l'URL affectée et la redirection en cache est oubliée.
Un gain rapide serait de saisir ceci dans la console du navigateur si vous pouvez:
fetch('example.com/affected/link', {method: 'post'}).then(() => {})
Utile si vous connaissez le navigateur affecté (en particulier pendant le développement).
Alternativement , si vous avez accès à la page de redirection 301 précédente, vous pouvez ajouter ce script à la page et chaque fois qu'il sera visité, le 301 mis en cache sera oublié.
la source
Je posterai une réponse qui m'a aidé:
aller à l'url:
il devrait invoquer un popup puis ..
cached images and files
.from beginning
la source
comme réponse de @thomasrutter
En fait, cela signifie:
a.com 301 à b.com
supprimer les 301 de a.com
ajouter b.com 301 à a.com
Alors ça marche.
la source
a.com
301 -> b.com) (supprimera.com
le 301) (ajoutera.com/abcdefg
301 ->a.com
) et forcer le client à visualiser d'unea.com/abcdefg
manière ou d'une autre?J'ai une solution simple qui a fonctionné sur tous les principaux navigateurs (dernière version), notamment IE, Chrome et FF
la source
À des fins de test (pour éviter les redirections mises en cache), les utilisateurs peuvent ouvrir une NOUVELLE FENÊTRE PRIVÉE : cliquez sur
CTRL+SHIFT+
N
[si vous utilisez Mozilla, utilisezP
]la source
Testez vos redirections en utilisant le mode incognito / InPrivate pour que lorsque vous fermez le navigateur, il videra ce cache et la réouverture de la fenêtre ne contiendra pas le cache.
la source
Comme le montrent les autres réponses. La mise en cache peut être indéfiniment dans le navigateur. C'est extrêmement dangereux. Alors ne le fais pas. Ajoutez au moins des en-têtes de cache. Dans htaccess, je le fais toujours de cette façon avec maintenant la mise en cache du tout:
la source
Pour résoudre le problème d'une adresse d'hôte local, j'ai changé le numéro de port sous lequel le site fonctionnait. Cela a fonctionné sur la version 73.0.3683.86 de Chrome.
la source
Sur la dernière version de Google Chrome 79, vous pouvez utiliser le chrome: // net-internals et sélectionner DNS dans le panneau de gauche, puis appuyez sur le bouton Vider le cache de l'hôte
la source