439 votes

Combien de temps les navigateurs mettent-ils en cache les 301 HTTP ?

Je suis en train de déboguer un problème avec une redirection permanente HTTP 301. Après un test rapide, il semble que Safari vide son cache des 301 lorsqu'il est redémarré, mais pas Firefox.

Quand IE, Chrome, Firefox et Safari vident-ils leur cache des 301 ?

MISE À JOUR : Par exemple, si je veux rediriger example1.com a example2.com mais je l'ai accidentellement paramétré pour qu'il redirige vers example3.com c'est un problème. Je peux corriger l'erreur, mais toute personne qui a visité example1.com entre-temps aura mis en cache la redirection incorrecte vers example3.com et ne pourront donc atteindre ni l'un ni l'autre. example1.com o example2.com jusqu'à ce que leur cache soit vidé. Après enquête, j'ai découvert qu'il n'y avait pas Cache-Control y Expires Les en-têtes sont fixés. Les en-têtes de la réponse 301 incorrecte auraient été les suivants :

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 le montrent :

  • IE7, IE8, Android 2.3.4 n'ont pas de cache du tout.
  • Firefox 18.0.2, Safari 5.1.7 (sur Windows 7) et Opera 12.14, tous les caches, et vider le cache au redémarrage du navigateur.
  • IE10 et Chrome 25 ont un cache, mais ne le vident pas au redémarrage du navigateur, Alors, quand est-ce qu'ils vont se libérer ?

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

6voto

Dung Le Points 91

J'ai une solution simple qui fonctionne sur tous les principaux navigateurs (dernière version), notamment IE, Chrome et FF.

  1. Ctrl + Shift + Del
  2. -
    1. Chrome : Sélectionnez "Historique de navigation" et "Cache...".
    2. IE : Je laisse l'option par défaut "Fichiers Internet temporaires et fichiers de sites Web", "Cookies et données de sites Web", "Historique".
    3. FF : " Historique de navigation et de téléchargement ", " Cache ".
  3. Cliquez sur "Supprimer".
  4. Fermez et rouvrez votre navigateur. Cela devrait fonctionner

0 votes

Vous devez également vous assurer que vous n'êtes pas sur la page en question, car certains navigateurs n'effacent pas les éléments en cache des pages ouvertes.

5voto

MoshErsan Points 5119

Sur la dernière version de Google Chrome (79), vous pouvez utiliser la fonction chrome://net-internals et sélectionnez DNS dans le panneau de gauche, puis appuyez sur le bouton Effacer le cache de l'hôte

Screenshot of chrome opening the net-internals page

1 votes

Je ne sais pas pourquoi cela a été rétrogradé, Http 301 est un problème lié au cache de l'hôte DNS.

3voto

HerrSerker Points 9005

Comme le montrent les autres réponses. La mise en cache peut être indéfinie dans le navigateur. C'est extrêmement dangereux. Ne le faites donc pas. Ajoutez au moins des en-têtes de cache. Dans htaccess, je le fais toujours de cette façon, sans aucune mise en cache :

<IfModule mod_rewrite.c>
  RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
  # The E=nocache:1 sets the environment variable nocache to the value of one
  RewriteRule ^/?(.*) https://www.example.org/$1 [L,R=301,E=nocache:1]
</IfModule>

<IfModule mod_headers.c>
  ## Set the response header if the "nocache" environment variable is set
  ## in the RewriteRule above.
  Header always set Cache-Control "no-store, no-cache, must-revalidate" env=nocache

  ## Set Expires too ...
  Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT" env=nocache
</IfModule>

Edit :

Si vous n'aviez pas de mise en cache des redirections 301 dans le passé, vous devez rediriger vers la source à partir de la cible. Exemple :

Si vous aviez ceci

RewriteRule /my-source /my-target [L,R=301]

Tu dois mettre ça

# RewriteRule /my-source /my-target [L,R=301]
RewriteRule /my-target /my-source [L,R=301]

2voto

combatc2 Points 734

Pour résoudre le problème pour une adresse localhost, j'ai changé le numéro de port sous lequel le site fonctionne. Cela a fonctionné sur la version 73.0.3683.86 de Chrome.

1voto

yougotiger Points 306

Testez vos redirections en utilisant le mode incognito/InPrivé. Ainsi, lorsque vous fermez le navigateur, le cache est effacé et la réouverture de la fenêtre ne contient pas le cache.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X