web-dev-qa-db-fra.com

Qu'est-ce qui définit une redirection permanente?

Je suis un peu confus entre une redirection 301, l'approche javascript meta http-equiv="refresh et enfin l'utilisation d'une 404 qui permet de savoir où vous voulez aller et de vous faire suivre.

Je peux voir qu'un 301 (et un 302) pourrait ne jamais potentiellement transmettre la page HTML d'origine au client (elle peut être gérée sur le serveur, comme dans IIS ou Apache et lorsqu'il trouve le 'nouveau 'page à afficher, seule cette page est transmise au navigateur), où, comme la méta-actualisation nécessite que la page soit transmise au navigateur, une action est ensuite effectuée (le transfert).

Cependant, la page 404 peut aussi ne jamais être envoyée au navigateur! Envisagez de trouver une page, IIS ne la trouve pas. Par conséquent, éliminez le 404. Le 404 possède un code de serveur contenant la logique de transmission. Par conséquent, une seule page sera envoyée au navigateur.

Est-ce que le serveur renvoie uniquement 1 résultat (1 page HTML) qui en fait un 301 permanent et que, par conséquent, la réécriture d'URL ou l'exemple ci-dessus du type 404 sont identiques (le même traitement est considéré comme un 301)?

Si tel est le cas, en quoi cela diffère-t-il réellement d'un 302? Avons-nous besoin d'ajouter des méta-informations pour expliquer qu'il s'agit d'un 302 ou d'un 301? Mes recherches suggèrent que non.

1
Dave

Je pense que votre question est un peu déroutante, probablement parce que vous avez une terminologie mélangée.

Une redirection signifie littéralement qu'un client a essayé de charger une certaine URL et que le serveur l'a redirigé vers une autre page. Qu'il s'agisse ou non de la page souhaitée par l'utilisateur, cela n'a rien à voir avec un point de vue technique.

Un code d'état HTTP est un moyen pour le serveur de transmettre des informations sur la page demandée. Par exemple, si une page n'a pas été trouvée, elle envoie un code 404 "Introuvable". En règle générale, lorsqu’on parle de redirections au niveau du serveur, les utilisateurs se réfèrent aux codes d’état 301 ("Déplacés de façon permanente") ou 302 ("Déplacés temporairement").

Si vous définissez une certaine page (par exemple votre 404.html personnalisé) comme page d'erreur, techniquement , le client est redirigé vers l'adresse URL demandée. la page 404 actuelle. Cependant, le code de statut ne change pas, ce qui est interprété comme un "Introuvable" à toutes fins utiles, même s'il y a eu une sorte de redirection.


Il existe plusieurs façons d'envoyer un code d'état au client, parmi lesquelles utiliser des règles de réécriture au niveau du serveur (Apache/IIS) et envoyer les en-têtes à partir du code côté serveur exécuté (PHP, Perl, etc.).

Cependant, <meta http-equiv="refresh"> est pas l'un d'eux. Ceci est une balise HTML interprétée côté client, après que le serveur l’a fait. Il en va de même pour tout code javascript côté client susceptible de rediriger le visiteur vers une autre URL. Cela fonctionne simplement de la même manière que sur une page et en cliquant sur un lien vers une autre page.

Pour rendre les choses un peu plus déroutantes, Google a choisi d'interpréter un http-equiv="refresh" avec un délai d'attente de 0 secondes (une redirection instantanée) comme un code d'état 302. Il s'agit simplement de leur interprétation et de rien d'officiel. D'un point de vue technique (vous pouvez le vérifier en consultant l'onglet Réseau de votre console de développeur lors du chargement d'une page avec une actualisation), il s'agit simplement d'un chargement de page (statut 200) immédiatement suivi d'un autre chargement de page.

2
Stephan Muller