Le client est-il censé se comporter différemment? Comment?
Le statut 301 signifie que la ressource (page) est déplacée de manière permanente 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 le client/navigateur doit continuer à demander l'URL d'origine.
Lorsqu'un moteur de recherche trouve le code d'état 301 dans l'en-tête de réponse d'une page Web, il comprend que cette page Web n'existe plus, il recherche l'en-tête d'emplacement dans la réponse, sélectionne la nouvelle URL et remplace l'URL indexée par la nouvelle et transfère é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 le trafic de votre ancienne page Web, le pagerank et le redirigera vers la nouvelle (vous ne perdrez pas le trafic de votre ancienne page Web).
Navigateur: si un navigateur trouve le code d'état 301 puis met en cache le mappage de l'ancienne URL avec la nouvelle URL, le client/navigateur n'essaiera pas de demander l'emplacement d'origine mais utilisera désormais le nouvel emplacement à moins que le cache ne soit effacé.
Lorsqu'un moteur de recherche trouve le statut 302 pour une page Web, il ne fait que rediriger temporairement vers le nouvel emplacement et analyser les deux pages. L'ancienne URL de la page Web existe toujours dans la base de données du moteur de recherche et celui-ci tente toujours de demander l'ancien emplacement et de l'explorer. Le client/navigateur tentera toujours de demander l'emplacement d'origine.
En savoir plus sur la façon de l'implémenter dans asp.net c # et sur l'impact des moteurs de recherche - http: //www.dotnetbull .com/2013/08/301-permanent-vs-302-temporaire-status-code-aspnet-csharp-Implementation.html
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 lors de l'utilisation de 301.
Voir réponse de Peter Lee pour plus de détails.
301 signifie qu'un nouvel URI permanent a été attribué à la ressource demandée et que toute référence future à cette ressource doit être effectuée à l'aide de l'un des URI renvoyés.
302 est que la ressource demandée réside temporairement sous un autre URI.
Comme la redirection peut être modifiée à l'occasion, le client doit continuer à utiliser l'URI de demande pour les futures demandes.
Cette réponse ne peut être mise en cache que si elle est indiquée par un champ d'en-tête Cache-Control ou Expires.
Les redirections 301 sont mises en cache indéfiniment (au moins par certains navigateurs).
Cela signifie que si vous configurez un serveur 301, visitez cette page, vous serez non seulement redirigé, mais cette redirection sera mise en cache.
Lorsque vous visitez cette page à nouveau, votre navigateur * ne se donne même pas la peine de demander cette URL, il se connecte simplement à la cible de redirection mise en cache.
La seule façon d'annuler un utilisateur 301 avec cette redirection dans le cache consiste à rediriger sa redirection vers l'URL d'origine **. Dans ce cas, le navigateur remarquera la boucle et finalement demandera réellement l'URL entrée.
De toute évidence, ce n'est pas une option si vous décidez d'utiliser Facebook ou toute autre ressource que vous ne maîtrisez pas complètement.
Malheureusement, de nombreux fournisseurs d'hébergement proposent une fonctionnalité dans leur interface d'administration simplement appelée "redirection", qui effectue une redirection 301. Si vous l'utilisez pour rediriger temporairement votre domaine vers Facebook en tant que page à venir, vous êtes fondamentalement foutu.
* au moins Chrome et Firefox, selon Combien de temps les navigateurs cachent-ils HTTP 301? . Juste essayé avec Chrome 45. Edit: Safari 7.0.6 sur Mac également mis en cache, un redémarrage du navigateur n'a pas aidé (Link indique que sur Safari 5 sur Windows, il 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')
coupe la boucle
En bout de ligne: utilisez uniquement des caractères 301 si vous êtes absolument certain de ne plus jamais utiliser cette URL. Habituellement jamais sur le répertoire racine (example.com/)
Le principal problème de 301 est que le navigateur mettra la redirection en cache, même si vous la désactiviez à 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.