Redirection HTTP: 301 (permanent) vs 302 (temporaire)

381

Le client est-il censé se comporter différemment? Comment?

fil volant
la source
RFC 2616 - Codes d'état HTTP Je pourrais tout répéter là-dedans, mais cela l'indique assez clairement;)
Tiemen
2
Il convient de noter que la spécification fournit également des codes d'état 303 et 307 pour des redirections temporaires plus nuancées.
Patrick McElhaney
303 et 307 ne sont plus vraiment nécessaires. 303 était censé spécifier que la nouvelle URL est liée mais pas équivalente, et devrait être chargée avec GET même si la demande actuelle était POST, mais les navigateurs le font également avec 302 de toute façon. 307 était censé spécifier explicitement que la redirection est temporaire par opposition à 302 qui ne précisait pas si elle était temporaire, mais les navigateurs et les robots d'exploration traitent 302 comme temporaire de toute façon.
thomasrutter

Réponses:

569

Le statut 301 signifie que la ressource (page) est déplacée définitivement vers un nouvel emplacement. Le client / navigateur ne doit pas tenter de demander l'emplacement d'origine mais utiliser le nouvel emplacement à partir de maintenant.

Le statut 302 signifie que la ressource est temporairement située ailleurs et que le client / navigateur doit continuer à demander l'URL d'origine.

Philippe Leybaert
la source
12
Je vous remercie. Est-ce à dire que si j'utilise une redirection 301 (permanente), le client peut décider de ne plus jamais récupérer l'ancien emplacement et d'utiliser à la place toujours directement la nouvelle URL?
flybywire
18
Exactement! En fait, selon les spécifications, le client DEVRAIT toujours se rendre au nouvel emplacement.
Philippe Leybaert
7
Mais dans un navigateur, comment cela affecte-t-il? Réécrire l'historique dans le bouton de retour par exemple, pour éviter de revenir au mauvais dans un 301? Modifier silencieusement un signet sur 301 si vous cliquez sur un ancien?
Xavi Montero
9
@XaviMontero La plupart des navigateurs modernes mettent en cache 301 et ne prendront pas la peine de demander la source d'origine pendant 6 mois maximum
Jon
34
Trick to Remember HTTP Status codes 301-> Perm et 302-> Temp Redirect Two commence par T, comme pour Temporary commence par T.
ScottCate
108

Lorsqu'une araignée de moteur de recherche trouve le code d'état 301 dans l'en-tête de réponse d'une page Web, elle comprend que cette page Web n'existe plus, elle recherche l'en-tête d'emplacement en réponse, choisissez la nouvelle URL et remplacez l'URL indexée par la nouvelle et transférez également le pagerank .

Ainsi, le moteur de recherche actualise toutes les URL indexées qui n'existent plus (301 trouvées) avec la nouvelle URL, cela conservera votre ancien trafic de page Web, votre pagerank et le détournera vers la nouvelle (vous ne perdrez pas le trafic de votre ancienne page Web).

Navigateur: si un navigateur trouve le code d'état 301, il met en cache le mappage de l'ancienne URL avec la nouvelle URL, le client / navigateur ne tentera pas de demander l'emplacement d'origine, mais utilisera désormais le nouvel emplacement, sauf si le cache est effacé.

entrez la description de l'image ici

Lorsqu'un moteur de recherche araignée trouve le statut 302 d'une page Web, il ne redirige que temporairement vers le nouvel emplacement et explore les deux pages. L'ancienne URL de la page Web existe toujours dans la base de données du moteur de recherche et elle tente toujours de demander l'ancien emplacement et de l'explorer. Le client / navigateur tentera toujours de demander l'emplacement d'origine.

entrez la description de l'image ici

En savoir plus sur la façon de l'implémenter dans asp.net c # et quel est l'impact sur les moteurs de recherche - http://www.dotnetbull.com/2013/08/301-permanent-vs-302-temporary-status-code-aspnet -csharp-Implementation.html

Rohit
la source
35

La plupart du temps, 301 vs 302 est important pour l'indexation dans les moteurs de recherche, car leurs robots d'exploration en tiennent compte et transfèrent le PageRank lorsqu'ils utilisent 301.

Voir la réponse de Peter Lee pour plus de détails.

Résidu
la source
20

301 est que la ressource demandée s'est vu attribuer un nouvel URI permanent et toute référence future à cette ressource doit être effectuée à l'aide de l'un des URI retournés.

302 est que la ressource demandée réside temporairement sous un URI différent.

Étant donné que la redirection peut être modifiée à l'occasion, le client doit continuer à utiliser l'URI de demande pour les demandes futures.

Cette réponse n'est cachable que si elle est indiquée par un champ d'en-tête Cache-Control ou Expires.

Peter Lee
la source
1
Le 301 est donc logique, mais j'ai du mal à trouver un bon exemple d'utilisation du 302 .
Bob Stein
4
@ BobStein-VisiBone par exemple de la redirection 302: créez un fichier old.php avec le code <?php header("location: http://example.com/new.php"); ?>et le fichier new.php - <?php echo 'I am new'; ?>et allez sur le lien . Il redirigera et affichera le texte "Je suis nouveau". Remplacez ensuite le code dans old.php to <?php echo 'I am old'; ?>et accédez également au lien . Vous verrez le texte "Je suis vieux". Si vous avez effectué la redirection 301 dans old.php, vous auriez vu le texte "Je suis nouveau" même après les changements dans le code de old.php.
Apôtre
2
@ BobStein-VisiBone J'ai une page qui est obsolète et ne peut pas être affichée. Nous devons créer une nouvelle page mais ne serons pas prêts avant un certain temps. Nous utilisons une redirection temporaire vers une page existante qui nous est utile pour les visiteurs. Une fois la nouvelle page créée, nous utiliserons ensuite une redirection permanente vers celle-ci.
EddieC
4
302 est utile si votre URL de destination dépend de l'état.
Brian
7
Cela fait maintenant un moment que je suis là mais voici un bon exemple. Les webcomics ont généralement une URL qui mène à la dernière bande dessinée. Si c'est le cas webcomic.com/latestet redirige vers webcomic.com/some-comic-titleavec un 301, le navigateur redirigera toujours vers "some-comic-title". Même lorsque la prochaine bande dessinée a été publiée et que "latest" est désormais redirigé vers "another-comic-title" ... C'est là qu'une 302 serait mieux.
2017
17

Les redirections 301 sont mises en cache indéfiniment (au moins par certains navigateurs).

Cela signifie que si vous configurez un 301, visitez cette page, non seulement vous êtes redirigé, mais cette redirection est mise en cache.

Lorsque vous visitez à nouveau cette page, votre navigateur * ne prend même pas la peine de demander cette URL, il va simplement à la cible de redirection mise en cache.

La seule façon d'annuler un 301 pour un visiteur avec cette redirection dans le cache est de rediriger vers l'URL d'origine **. Dans ce cas, le navigateur remarquera la boucle et demandera finalement vraiment l'URL saisie.

De toute évidence, ce n'est pas une option si vous avez décidé de 301 sur Facebook ou toute autre ressource que vous n'êtes pas complètement sous contrôle.

Malheureusement, de nombreux hébergeurs proposent une fonctionnalité dans leur interface d'administration appelée simplement "Redirection", qui effectue une redirection 301. Si vous l'utilisez pour rediriger temporairement votre domaine vers Facebook en tant que page à venir, vous êtes essentiellement foutu.

* au moins Chrome et Firefox, selon combien de temps les navigateurs mettent-ils en cache HTTP 301? . Je viens de l'essayer avec Chrome 45. Edit: Safari 7.0.6 sur Mac met également en cache, un redémarrage du navigateur n'a pas aidé (Link dit que sur Safari 5 sur Windows, cela aide.)

** J'ai essayé javascript window.location = '', car ce serait la solution qui pourrait être appliquée dans la plupart des cas - cela ne fonctionne pas. Il en résulte une boucle infinie non détectée. Cependant, php header('Location: new.url')rompt la boucle

Conclusion : n'utilisez 301 que si vous êtes absolument sûr de ne plus jamais utiliser cette URL. Généralement jamais sur le répertoire racine (example.com/)

Sebastian Schmid
la source
7

Le principal problème avec 301 est que le navigateur mettra en cache la redirection même si vous avez désactivé la redirection à partir du niveau du serveur.

Il est toujours préférable d'utiliser 302 si vous activez la redirection pour une courte fenêtre de maintenance.

Jobin Joseph
la source
Ce n'est certainement pas un "problème"; c'est comme ça que ça doit fonctionner. Rediriger HTTP vers HTTPS, Rediriger un site Web abandonné vers un nouveau, etc., sont quelques-unes des utilisations habituelles de 301.
HosseyNJF