Code de Statut HTTP 302 (302 Found) : Signification et Utilisation

Advertisement
Qu'est-ce que le Code de Statut HTTP 302 ?
Le code de statut HTTP 302 — officiellement nommé 302 Found — est un code de réponse HTTP qui indique au client (généralement un navigateur) que la ressource demandée a été temporairement déplacée vers une autre URL. La nouvelle URL est fournie dans l'en-tête Location de la réponse, et le client doit récupérer la ressource depuis là, uniquement pour cette requête.
Comme le déplacement est temporaire, le client doit continuer à utiliser l'URL originale pour les requêtes futures. Les moteurs de recherche, navigateurs et favoris ne doivent pas remplacer l'URL originale par la cible de redirection. C'est la principale différence comportementale entre HTTP 302 et 301 Moved Permanently.
Le code 302 appartient à la classe 3xx de redirection des codes de statut HTTP, définie dans la RFC 9110. Malgré le nom historique 'Found', le corps de la réponse n'est presque jamais utilisé — les navigateurs modernes suivent immédiatement l'en-tête Location sans le rendre.
Anatomie d'une Réponse 302
Une réponse de code de statut HTTP 302 contient toujours deux éléments essentiels : la ligne de statut elle-même et un en-tête Location pointant vers la nouvelle URL. Sans en-tête Location valide, le client ne peut pas suivre la redirection.
Ligne de statut —
HTTP/1.1 302 Found(ouHTTP/2 302en HTTP/2)En-tête Location — l'URL de destination que le client doit suivre (obligatoire)
Cache-Control — généralement
no-cachepour que les navigateurs ne mettent pas la cible en cache de manière permanenteBody — généralement vide, bien que les serveurs puissent inclure une petite page HTML pour les clients legacy (
<html><body><a href="...">Cliquer ici</a></body></html>)
HTTP/1.1 302 Found
Location: https://www.example.com/new-page
Content-Type: text/html; charset=UTF-8
Content-Length: 0
Cache-Control: no-cache, no-store
Date: Mon, 27 Apr 2026 14:00:00 GMTL'en-tête Location peut être une URL absolue (https://example.com/path) ou relative au chemin (/path). Les clients HTTP modernes acceptent les deux, bien que les URL absolues soient recommandées pour la clarté.
302 vs 301 vs 307 vs 308 : Quelle Redirection Choisir ?
HTTP définit cinq codes de redirection courants, et choisir le bon impacte le cache, le SEO et la préservation de la méthode. Utilisez ce tableau comme matrice de décision :
| Code | Permanence | Méthode préservée ? | Mis en cache par les navigateurs ? | Idéal pour |
|---|---|---|---|---|
| 301 Moved Permanently | Permanent | Peut changer POST→GET | Oui (agressivement) | Changements d'URL permanents, migrations de domaine |
| 302 Found | Temporaire | Change souvent POST→GET | Non | Flux de login, tests A/B, maintenance |
| 303 See Other | Temporaire | Change toujours en GET | Non | Pattern POST/Redirect/GET après soumission de formulaire |
| 307 Temporary Redirect | Temporaire | Oui — préservée | Non | Redirections temporaires devant garder POST/PUT |
| 308 Permanent Redirect | Permanent | Oui — préservée | Oui | Redirections permanentes devant garder POST/PUT |
La recommandation moderne : si vous avez besoin d'une redirection temporaire et voulez être sans ambiguïté sur la méthode, utilisez 307 au lieu de 302. Le code 307 a été ajouté en HTTP/1.1 précisément parce que les navigateurs violaient historiquement la spec en changeant POST en GET sur un 302 — et ce comportement incorrect est devenu si répandu qu'il est devenu le standard de fait.
Quand Utiliser une Redirection 302 ?
Utilisez le code de statut HTTP 302 chaque fois que la redirection est réellement temporaire — c'est-à-dire quand vous prévoyez de retirer ou changer la cible de redirection à l'avenir. Cas d'usage légitimes courants :
Redirections de login — Envoyer un utilisateur non authentifié de
/dashboardvers/login, puis le ramener après connexionTests A/B — Router 50 % des utilisateurs vers une variante sans changer l'URL canonique
Pages de maintenance — Rediriger temporairement tout le trafic vers
/maintenancependant qu'on patche le serveurRoutage par géolocalisation — Envoyer les visiteurs de
/vers/frou/usselon leur pays, en gardant/comme entrée canoniqueRedirections mobiles — Rediriger les utilisateurs smartphone d'
example.comversm.example.com(le design responsive est aujourd'hui préféré)Pages produits en rupture — Envoyer les acheteurs vers la catégorie en attendant que le produit revienne en stock
URL promotionnelles courtes —
/black-fridayredirigeant vers la landing campagne uniquement pendant la promo
Si l'un de ces cas devient permanent, passez à 301. Les moteurs de recherche attendent plusieurs mois avant de traiter un 302 durable comme un 301, donc laisser un déplacement permanent en 302 coûte des signaux de classement pendant cette période.
Advertisement
Comment Envoyer un Code de Statut 302
La plupart des serveurs web et frameworks ont des helpers intégrés pour envoyer une redirection 302. Voici les patterns les plus courants. Chacun émet HTTP 302 Found avec un en-tête Location — les deux seules choses dont une réponse 302 a strictement besoin.
Nginx
Sur Nginx, utilisez la directive return avec le code 302 (le défaut si vous omettez le code est aussi 302) :
server {
listen 80;
server_name example.com;
# Redirection temporaire (302 Found)
location /old-page {
return 302 https://example.com/new-page;
}
}Apache (.htaccess)
Sur Apache, utilisez Redirect avec le code 302 ou RewriteRule avec le flag [R=302,L] :
# Redirection temporaire simple
Redirect 302 /old-page https://example.com/new-page
# Ou avec mod_rewrite pour la correspondance par motif
RewriteEngine On
RewriteRule ^maintenance$ /maintenance.html [R=302,L]Node.js (Express)
res.redirect() d'Express utilise 302 par défaut quand aucun code n'est fourni :
// Redirection temporaire (302 Found par défaut)
app.get('/dashboard', (req, res) => {
if (!req.user) {
return res.redirect('/login') // envoie 302
}
// ...rendu du dashboard
})
// Ou explicitement :
res.redirect(302, '/login')Comment Tester un Code de Statut 302
Après avoir implémenté une redirection 302, vérifiez qu'elle fonctionne correctement. Le plus rapide est curl depuis le terminal — il montre le code de statut exact et l'en-tête Location sans interférence du cache navigateur.
# Afficher uniquement les en-têtes (-I) sans suivre la redirection
curl -I https://example.com/old-page
# Sortie attendue :
# HTTP/2 302
# location: https://example.com/new-page
# cache-control: no-cache
# date: Mon, 27 Apr 2026 14:00:00 GMT
# Suivre toute la chaîne (-L) et afficher chaque saut
curl -ILs https://example.com/old-page | grep -i 'HTTP/\|location:'Sans accès terminal, utilisez le Vérificateur de Redirection gratuit de DNS Robot pour tracer toute la chaîne depuis un serveur neutre, ou le Vérificateur d'En-têtes HTTP pour inspecter les en-têtes bruts — les deux contournent le cache navigateur.
Redirections 302 et SEO
Un code de statut HTTP 302 dit aux moteurs de recherche : « ce déplacement est temporaire, gardez l'URL originale dans l'index. » Cela a des conséquences directes sur les signaux de classement.
Selon Google Search Central, un 302 ne transfère pas les signaux de classement de l'URL originale vers la cible de redirection comme le fait un 301. L'URL originale reste canonique. Google peut quand même indexer la page cible si d'autres signaux de canonicalisation (liens internes, sitemap, hreflang) pointent vers elle — mais le 302 lui-même n'est pas un signal canonique.
Utilisez 301 pour les déplacements permanents — Changements de domaine, modifications de structure d'URL, consolidation de pages
Utilisez 302 pour les déplacements temporaires — Flux de login, tests A/B, maintenance, routage régional
Ne laissez pas un déplacement permanent en 302 — Google attend des mois avant de traiter un 302 long comme un 301, vous perdez de l'équité de classement pendant ce temps
Évitez les chaînes —
A → 302 → B → 302 → Cdilue les signaux et ralentit le chargement. Chaque saut ajoute de la latence
Pourquoi un 302 Change les Requêtes POST en GET
C'est le comportement le plus surprenant de HTTP 302. La RFC originale disait que les clients devaient préserver la méthode en suivant une redirection. Mais les premiers navigateurs — Mosaic, Netscape, IE — changeaient tous POST en GET sur un 302, et ce comportement incorrect est devenu si répandu qu'il a été standardisé dans le WHATWG Fetch Standard.
Aujourd'hui, quand un navigateur envoie un POST /login et que le serveur répond 302 Found, le navigateur émet automatiquement un GET /next-page vers la cible. Les données du formulaire sont perdues. Ce n'est presque jamais l'intention du développeur.
# Ce que vous envoyez :
POST /submit-form HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
name=Alice&email=alice@example.com
# Le serveur répond avec 302 :
HTTP/1.1 302 Found
Location: /thank-you
# Le navigateur suit avec GET (données du formulaire perdues !) :
GET /thank-you HTTP/1.1
Host: example.comSi la redirection doit préserver la méthode originale (POST reste POST, PUT reste PUT), utilisez 307 Temporary Redirect au lieu de 302. Si vous voulez intentionnellement supprimer le body et passer à GET — le pattern classique POST/Redirect/GET — utilisez 303 See Other. Les deux sont sans ambiguïté ; 302 ne l'est pas.
Advertisement
Erreurs 302 Courantes et Comment les Corriger
Quand HTTP 302 tourne mal, cela apparaît généralement sous l'une de ces formes. La plupart ont des solutions simples :
`Recevoir 302 au lieu de 200` — Le serveur redirige alors qu'il ne devrait pas. Vérifiez
.htaccess, la config Nginx ou le middleware du framework`302 sans en-tête Location` — Réponse invalide. Les navigateurs afficheront une page blanche. Assurez-vous que votre code définit l'en-tête
Locationavant d'envoyer le statut`302 redirigeant sur lui-même` — Boucle de redirection. L'URL
Locationest identique à l'URL de requête. Vérifiez les conditions manquantes`302 supprimant les données du formulaire` — POST → 302 → GET supprime le body. Passez à
307 Temporary Redirectpour préserver le POST`302 mis en cache par le navigateur` — Serveur bogué a défini
Cache-Control: max-age=...sur la redirection. AjoutezCache-Control: no-cacheet videz le cache`302 en production mais pas en local` — Généralement un CDN ou load balancer ajoutant des redirections. Testez directement contre l'origin pour isoler
Boucles de Redirection 302 : Comment Diagnostiquer
Une boucle de redirection survient quand l'URL A renvoie un 302 vers l'URL B, et que l'URL B renvoie un 302 vers A. Après 20 sauts (dans Chrome et Firefox), le navigateur affiche ERR_TOO_MANY_REDIRECTS et abandonne.
La cause unique la plus courante est un conflit SSL/HTTPS entre un CDN (comme Cloudflare) et le serveur d'origine : le CDN se connecte à l'origin en HTTP, l'origin redirige HTTP→HTTPS, le CDN supprime le HTTPS et se reconnecte en HTTP — boucle infinie.
# Tracer toute la chaîne (limiter à 10 sauts pour éviter les boucles)
curl -ILs --max-redirs 10 https://example.com 2>&1 | grep -i 'HTTP/\|location:'
# Exemple de boucle :
# HTTP/2 302
# location: http://example.com/
# HTTP/1.1 302 Found
# Location: https://example.com/
# HTTP/2 302
# location: http://example.com/ <-- boucle confirméeSi vous voyez deux URL alternant dans les en-têtes Location, vous avez confirmé une boucle 302. Pour un guide complet, voir notre article ERR_TOO_MANY_REDIRECTS. Le Vérificateur de Redirection de DNS Robot trace toute la chaîne depuis un emplacement neutre et s'arrête au point de boucle.
Bonnes Pratiques pour le Code de Statut 302
Envoyer correctement 302 Found évite la plupart des bugs que rencontrent les développeurs en implémentant des redirections :
Toujours inclure un en-tête Location — Un
302sansLocationest invalide et s'affiche comme une page blancheToujours définir Cache-Control: no-cache — Sinon certains navigateurs cachent la redirection pendant la session, brisant le contrat « temporaire »
Utiliser des URL absolues dans Location —
https://example.com/newest sans ambiguïté ;/newfonctionne mais peut casser derrière des proxys qui changent l'hôteGarder les redirections à un seul saut —
A → 302 → Bc'est bien ;A → 302 → B → 302 → Cralentit et dilue les signauxNe pas rediriger d'un POST vers une autre page avec 302 — Utiliser
303(GET intentionnel) ou307(préserver POST)Auditer les redirections mensuellement — Les redirections temporaires anciennes survivent souvent à leur raison. Vérifier avec Redirect Checker
Passer à 301 quand le déplacement devient permanent — Ne pas laisser un déplacement permanent en
302plus de quelques semaines
Comportement des Navigateurs et du Cache
Les différents navigateurs et intermédiaires gèrent HTTP 302 un peu différemment. Connaître les particularités fait gagner du temps de débogage :
| Client | Comportement par défaut sur 302 | Cache par défaut |
|---|---|---|
| Chrome / Edge | Suit auto, change POST→GET | Pas de cache sauf si en-têtes le disent |
| Firefox | Suit auto, change POST→GET | Pas de cache sauf si en-têtes le disent |
| Safari | Suit auto, change POST→GET | Cache de redirections un peu plus agressif |
| curl (défaut) | Ne suit PAS — affiche 302 + Location | Pas de cache |
| curl -L | Suit jusqu'à --max-redirs (défaut 50) | Pas de cache |
| wget (défaut) | Suit auto jusqu'à --max-redirect=20 | Pas de cache |
| Googlebot | Suit, traite comme signal temporaire | Re-crawle l'URL originale |
Pour vérifier les cas limites (méthodes POST, boucles infinies, présence d'en-têtes), le Vérificateur d'En-têtes HTTP de DNS Robot affiche la réponse brute sans réécriture de méthode par le navigateur. En savoir plus sur les redirections temporaires dans la documentation MDN et la spécification RFC 9110.
Advertisement
Tracez n'importe quelle chaîne de redirection en quelques secondes
Utilisez le Vérificateur de Redirection gratuit de DNS Robot pour inspecter chaque saut d'une chaîne — codes de statut, en-têtes Location et destination finale depuis un serveur neutre (sans cache navigateur).
Essayer Vérificateur de RedirectionAdvertisement
Questions Fréquemment Posées
Le code de statut 302 (HTTP 302 Found) signifie que la ressource demandée se trouve temporairement à une autre URL indiquée par l'en-tête Location de la réponse. Le client doit suivre la redirection pour cette requête mais continuer à utiliser l'URL originale pour les requêtes futures. C'est l'équivalent temporaire de 301 Moved Permanently.