Aller au contenu
EuroVPSEuroVPS

Guide complet des codes d'état HTTP : série 300

Les codes d'état HTTP 300 sont destinés aux redirections. La plupart des redirections sont transparentes pour l'utilisateur final et entièrement gérées par le user-agent.

Par Thomas

Mis à jour le 22 octobre 20266 min de lecture
Image de couverture : guide des erreurs HTTP, série 300

Pour mieux comprendre pourquoi les redirections sont si importantes, il peut être utile de comprendre pourquoi on utiliserait une redirection en premier lieu.

Les redirections résultent d'ordinaire d'un changement. Ce peut être un changement de ressources informatiques, un changement de terminologie marketing, un changement de politique, un changement de stratégie SEO, ou un changement dans le fonctionnement de l'entreprise. Quelque part, quelque chose a changé et exige que le même URI soit accessible à un autre emplacement.

Quand des changements sont faits, les moteurs de recherche et d'autres ressources conservent les anciens liens jusqu'à ce que le site soit réindexé.

L'alternative à une redirection serait une erreur 404 « document not found ».

Un scénario extrême imposant de rediriger un user-agent serait une entreprise qui réorganise sa gamme de produits. Disons, par exemple, qu'ACME Co. a déplacé la gamme Widgets vers ACME Labs. La politique actuelle d'ACME impose une structure web de la forme : acmeco/{division}/{productline}.

ACME pourrait donc avoir :

www.acme.com www.acme.com/marketing/seotechnologies/ www.acme.com/marketing/billboards/ www.acme.com/consumergoods/sports/ www.acme.com/consumergoods/clothing/ www.acme.com/consumergoods/widgets/ www.acme.com/labs/widgets/ www.acme.com/labs/foobars/ www.acme.com/labs/betaproducts/

ACME Widgets se trouvait à www.acme.com/consumergoods/widgets/ depuis 5 ans et reçoit des dizaines de milliers de visites par heure à cet emplacement.

Imaginez-vous combien de chiffre d'affaires ce simple déplacement pourrait coûter à ACME Co., en ventes perdues, en service client répondant aux réclamations, et en dirigeants décrochant le téléphone pour des déclarations officielles à la presse sur la gamme Widget bien-aimée ?

Et les moteurs de recherche ? Une bonne part des ventes de Widgets d'ACME Co. vient de visites issues des moteurs de recherche. Sans parler de la campagne Google Ads et de l'URL imprimée sur les brochures et les cartes de visite.

Une redirection de la série 300 peut résoudre le problème pour tout le monde chez ACME Co. ACME peut simplement configurer le serveur web pour rediriger toutes les requêtes vers www.acme.com/consumergoods/widgets/ vers www.acme.com/labs/widgets/.

(hr)

Exemple concret d'une redirection 301

Chez EuroVPS, nous utilisons une redirection 301 pour nous assurer que les visiteurs utilisent le protocole sécurisé HTTPS.

Voici exactement comment la redirection 301 garantit que chaque visiteur utilisera HTTPS en visitant EuroVPS :

  1. le user-agent demande http://www.eurovps.com/
  2. le serveur web répond par un code d'état 301
  3. le serveur web définit un en-tête Location vers la version https
  4. la plupart des user-agents se redirigent automatiquement vers la nouvelle URL
Redirection quand l'en-tête Location n'est pas suivi
un message s'affiche pour les user-agents qui n'honorent pas l'en-tête Location.

Les redirections peuvent être réalisées dans des langages de script comme Python Django, PHP et ASP .Net. Toutefois, une solution plus robuste est de confier les redirections au serveur web avec une règle de réécriture.

Redirection en PHP :

<?php // Permanent 301 Redirect via PHP header("HTTP/1.1 301 Moved Permanently"); header("Location: https://eurovps.com/"); exit; // stop the script once the redirect is sent

Le problème des redirections à ce niveau élevé est que nous pourrions finir par modifier 100 pages ! Ou pire encore, bricoler du code dans un système de gestion de contenu qui pourrait ne pas faire les redirections comme nous le voudrions.

Une solution bien plus élégante est de laisser le serveur web faire toute la redirection pour nous.

Sous Apache, les redirections pourraient se faire ainsi :

RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Sous nginx, la même redirection tient en une ligne dans le server block qui écoute sur le port 80 :

server { listen 80; server_name www.example.com; return 301 https://$host$request_uri; }

(hr)

Redirections avec un code d'état 300

300 Multiple Choices

300 Multiple Choices est une redirection rarement utilisée dans le monde réel. On rencontre 300 Multiple Choices quand une ressource demandée pointe vers plusieurs destinations pour le même document demandé. Un choix d'action est présenté à l'utilisateur final, qui sélectionne celui qu'il souhaite.

301 Moved Permanently

Les redirections 301 sont courantes parce que les moteurs de recherche traitent un 301 comme un déplacement permanent : ils mettent à jour leur index vers le nouvel URI et transfèrent les signaux de classement.

Quand un client rencontre un 301, les favoris et les user-agents automatisés doivent être mis à jour vers le nouvel URI.

302 Found

Les redirections 302 doivent être utilisées quand un URI demandé se trouve temporairement à un nouvel emplacement. Le user-agent suit l'en-tête Location vers l'URI temporaire. Pour des raisons historiques, la plupart des clients transforment un POST en GET quand ils suivent un 302. Utilisez un 307 quand la méthode doit être conservée.

Contrairement au 301, les user-agents doivent continuer à utiliser l'URI d'origine, parce qu'il s'agit d'une redirection temporaire.

303 See Other

Le 303 sert principalement aux requêtes POST et PUT dirigées vers un URI différent de celui demandé à l'origine par le user-agent dans sa requête POST ou PUT.

Un exemple pourrait être le téléversement d'un gros fichier qui peut prendre quelques minutes :

  1. le user-agent soumet un gros fichier avec PUT ou POST
  2. le fichier est destiné à l'URI d'origine
  3. le serveur web renvoie un 303 redirigeant vers une page d'état du téléversement
  4. le user-agent utilisera GET via le 303, en demandant une page d'état du téléversement

304 Not Modified

Le 304 Not Modified sert au cache. Le 304 est envoyé comme état à un user-agent qui demande une vérification de l'état actuel d'une page mise en cache.

Si la page demandée est toujours à jour, le serveur répond par un 304 sans corps, et le user-agent montre sa copie en cache à l'utilisateur final.

Redirection 304
Ci-dessus, une vérification sur un fichier javascript en cache.

305 Use Proxy (obsolète)

Le 305 Use Proxy est obsolète. La spécification HTTP actuelle, la RFC 9110, l'indique comme n'étant plus utilisé, et les navigateurs n'y réagissent pas. Ne l'utilisez pas.

307 Temporary Redirect

Le 307 ressemble au 302 mais exige que la même méthode de requête soit utilisée sur l'URI redirigé. On l'utiliserait, par exemple, quand une requête POST doit être envoyée vers un autre URI.

Avec un 302, la plupart des clients passent à une requête GET pour obtenir l'URI redirigé.

308 Permanent Redirect

Le 308 est le pendant permanent du 307. Comme le 301, il dit aux clients que la ressource a déménagé pour de bon. Comme le 307, il exige que le client répète la requête avec la même méthode. Utilisez-le quand un déplacement permanent doit garder un POST en POST.

Les codes d'état de ce guide sont définis dans la RFC 9110 (HTTP Semantics).

Article lié : Guide complet des codes d'état HTTP : série 400

Extrait des archives du blog EuroVPS, publié pour la première fois le 12 décembre 2019.

Toutes les notes de terrain