W3docs

Messages de statut HTTP

Référence complète des codes de statut HTTP (1xx–5xx) avec les plus courants expliqués et un exemple fetch() qui branche sur response.status.

Chaque fois qu'un navigateur charge une page, soumet un formulaire ou que votre JavaScript effectue un appel fetch(), le serveur répond avec un code de statut HTTP à trois chiffres. Ce code indique au client si la requête a réussi, a été redirigée, a échoué en raison d'une erreur côté client ou d'une erreur côté serveur. Le navigateur l'utilise automatiquement — il suit les redirections, affiche sa propre page d'erreur pour certains codes et réutilise le contenu en cache pour d'autres — mais en tant que développeur, vous lisez aussi ces codes directement : un formulaire est envoyé et vous branchez sur la réponse, ou un fetch() se résout et vous vérifiez response.ok (qui signifie simplement « statut dans la plage 200–299 »).

Vous trouverez ici la liste des codes de statut de réponse du Hypertext Transfer Protocol (HTTP). Ces codes répondent à la requête qu'un client adresse à un serveur — que cette requête utilise GET, POST ou une autre méthode HTTP — et ils sont regroupés en 5 classes selon leur premier chiffre. Les connaître vous aide à déboguer les liens brisés, les URL incorrectes, les soumissions de formulaires échouées et les réponses API inattendues. Parcourons chaque classe :

Danger

Si vous recevez une réponse qui ne figure pas dans cette liste, cela signifie qu'il s'agit d'une réponse non standard, peut-être propre au logiciel du serveur.

Gestion des codes de statut en JavaScript

Lorsque vous soumettez un formulaire ou appelez une API avec fetch(), la requête réussit (la promesse se résout) même si le serveur retourne une erreur 4xx ou 5xx — un 404 ou 500 reste une réponse HTTP valide, et non une défaillance réseau. Vous devez donc inspecter le statut vous-même. Le raccourci pratique est response.ok, qui vaut true uniquement pour la plage 200–299 ; pour tout autre cas, vous branchez sur response.status pour réagir de manière appropriée :

const form = document.querySelector("#signup");

form.addEventListener("submit", async (event) => {
  event.preventDefault();

  const response = await fetch("/api/signup", {
    method: "POST",
    body: new FormData(form),
  });

  if (response.ok) {
    // 200–299: success
    window.location.href = "/welcome";
  } else if (response.status === 401) {
    showMessage("Please log in first.");
  } else if (response.status === 422) {
    // Validation errors returned as JSON
    const data = await response.json();
    showMessage(data.error);
  } else if (response.status === 429) {
    // Rate limited — respect the Retry-After header
    const wait = response.headers.get("Retry-After");
    showMessage(`Too many attempts. Try again in ${wait}s.`);
  } else if (response.status >= 500) {
    showMessage("Server error — please try again later.");
  } else {
    showMessage(`Unexpected error (${response.status}).`);
  }
});

Notez que fetch() ne rejette qu'en cas de véritables problèmes réseau (pas de connexion, blocage CORS, échec DNS), donc encapsuler l'appel dans un try…catch gère ces cas, tandis que le if/else ci-dessus gère le statut HTTP lui-même.

Info

Les codes les plus importants à connaître en premier. Si vous n'en mémorisez qu'une poignée, choisissez ceux-ci : 200 (OK), 301 (Moved Permanently), 302 (Found / redirection temporaire), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found) et 500 (Internal Server Error). Ils couvrent la grande majorité de ce que vous verrez dans les outils de développement du navigateur et les journaux serveur.

1xx : Information

Code de statutMessageDescription
100ContinueSignifie que le serveur a reçu les en-têtes de la requête et que le client doit continuer à envoyer le corps de la requête.
101Switching ProtocolsSignifie que le client, qui a fait une requête, a demandé au serveur de changer de protocole (par exemple, pour passer à une connexion WebSocket).
102ProcessingUn code WebDAV signifiant que le serveur a accepté la requête mais ne l'a pas encore terminée ; utilisé pour éviter que le client n'expire lors d'une opération longue.
103Early HintsDéfini dans RFC 8297. Permet au serveur d'envoyer certains en-têtes de réponse (comme les en-têtes Link qui préchargent des ressources) avant la réponse finale, afin que le navigateur puisse commencer à récupérer des ressources plus tôt.

2xx : Succès

Code de statutMessageDescription
200OKSignifie que la requête est OK. Il s'agit de la réponse standard pour les requêtes HTTP réussies.
201CreatedSignifie que la requête a été satisfaite et qu'une nouvelle ressource a été créée.
202AcceptedSignifie que la requête a été acceptée pour traitement, mais que le traitement est en cours.
203Non-Authoritative InformationSignifie que la requête a été traitée avec succès, mais qu'elle retourne des informations pouvant provenir d'une autre source.
204No ContentSignifie que la requête a été traitée avec succès, mais qu'elle ne retourne aucun contenu.
205Reset ContentSignifie que la requête a été traitée, mais qu'elle ne retourne aucun contenu et exige que le demandeur réinitialise la vue du document.
206Partial ContentSignifie que le serveur ne livre qu'une partie de la ressource, en raison d'un en-tête de plage envoyé par le client.

3xx : Redirection

Code de statutMessageDescription
300Multiple ChoicesIndique plusieurs options pour la ressource que le client peut suivre.
301Moved PermanentlySignifie que la page a été définitivement déplacée vers une nouvelle URL. Les navigateurs et les moteurs de recherche mettent à jour leurs références, donc un 301 transmet l'équité de lien vers la nouvelle URL et constitue le bon choix pour les redirections favorables au SEO.
302FoundSignifie que la page demandée a été temporairement déplacée vers une nouvelle URL. Les moteurs de recherche conservent l'URL d'origine indexée, donc utilisez 302 (et non 301) quand le déplacement est de courte durée, par exemple lors d'une maintenance ou de tests A/B.
303See OtherSignifie que la réponse à la requête peut être trouvée à une autre URL, que le client doit récupérer avec GET. Couramment utilisé après un POST de formulaire pour rediriger vers une page de résultat.
304Not ModifiedSignifie que la ressource demandée n'a pas été modifiée depuis sa dernière mise en cache. Le serveur n'envoie pas de corps, donc le navigateur réutilise sa copie en cache — cela économise de la bande passante et accélère les visites répétées.
307Temporary RedirectSignifie que la page demandée a été temporairement déplacée vers une nouvelle URL. Contrairement au 302, le client doit conserver la méthode de requête d'origine (un POST reste un POST).
308Permanent RedirectSignifie que la ressource demandée a été définitivement déplacée vers une nouvelle URL.

Les codes non listés ici (comme 305 et 306) sont dépréciés, rares ou spécifiques à des extensions.

4xx : Erreur client

Code de statutMessageDescription
400Bad RequestSignifie que la requête ne peut pas être satisfaite en raison d'une mauvaise syntaxe ou de données invalides.
401UnauthorizedSignifie que le client n'est pas authentifié — des identifiants valides sont manquants ou incorrects. Le serveur ne sait pas encore qui vous êtes, donc il vous demande de vous connecter. (Remarque : le nom dit « Unauthorized » mais signifie réellement « Non authentifié ».)
402Payment RequiredEst réservé à un usage futur.
403ForbiddenSignifie que le client est authentifié mais non autorisé — le serveur sait qui vous êtes, mais vous n'avez pas la permission d'accéder à cette ressource. Contrairement au 401, envoyer à nouveau des identifiants n'aidera pas.
404Not FoundSignifie que la page demandée est introuvable pour le moment, mais elle pourrait être disponible à nouveau dans le futur.
405Method Not AllowedSignifie que la requête a été faite sur une page qui utilise une méthode de requête non prise en charge pour cette page.
406Not AcceptableSignifie que le serveur ne peut générer qu'une réponse que le client n'accepte pas.
407Proxy Authentication RequiredSignifie que le client doit d'abord s'authentifier auprès du proxy.
408Request TimeoutSignifie que le serveur a expiré en attendant la requête.
409ConflictSignifie que la requête ne peut pas être complétée en raison d'un conflit dans la requête.
410GoneSignifie que la page demandée n'est plus disponible.
411Length RequiredSignifie que la longueur du contenu n'est pas définie et que le serveur n'acceptera pas la requête sans elle.
412Precondition FailedSignifie que la précondition donnée dans la requête est évaluée à faux par le serveur.
413Request Entity Too LargeSignifie que l'entité de la requête est trop grande et que c'est pourquoi le serveur n'acceptera pas la requête.
414Request-URI Too LongSignifie que l'URL est trop longue et que c'est pourquoi le serveur n'acceptera pas la requête. Cela se produit quand vous convertissez une requête POST en requête GET avec de longues informations de requête.
415Unsupported Media TypeSignifie que le type de média n'est pas pris en charge et que c'est pourquoi le serveur n'acceptera pas la requête.
416Requested Range Not SatisfiableSignifie que le client a demandé une partie du fichier mais que le serveur ne peut pas fournir cette partie.
417Expectation FailedSignifie que le serveur ne peut pas satisfaire aux exigences du champ d'en-tête de requête Expect.
418I'm a TeapotUn code humoristique issu de la RFC 2324 (le Hyper Text Coffee Pot Control Protocol). Ce n'est pas une vraie erreur, mais certaines API le retournent délibérément, donc vous pouvez le rencontrer en pratique.
422Unprocessable ContentSignifie que la requête était bien formée mais contient des erreurs sémantiques qui l'empêchent d'être traitée — couramment retourné par les API lorsque les données d'un formulaire ou JSON échouent à la validation.
429Too Many RequestsSignifie que le client a envoyé trop de requêtes dans un laps de temps donné (« limitation de débit »). La réponse inclut souvent un en-tête Retry-After indiquant combien de temps attendre avant de réessayer.
451Unavailable For Legal ReasonsSignifie que la ressource demandée est indisponible pour des raisons légales, comme la censure ou une ordonnance de retrait (le numéro fait référence au roman Fahrenheit 451).

Les codes non listés ici (comme 419, 420 et plusieurs dans la plage 423–431) sont rares, spécifiques à un framework ou non standard. Certains — comme 421 (Misdirected Request, utilisé en HTTP/2) et 451 ci-dessus — sont normalisés mais peu courants dans le travail quotidien.

5xx : Erreur serveur

Code de statutMessageDescription
500Internal Server ErrorEst une erreur générique que les utilisateurs reçoivent lorsqu'il n'existe pas de message spécifique plus approprié.
501Not ImplementedSignifie que le serveur ne reconnaît pas la méthode de requête ou qu'il ne dispose pas de la capacité de satisfaire la requête.
502Bad GatewaySignifie qu'un serveur agissant comme passerelle, proxy inverse ou répartiteur de charge a reçu une réponse invalide du serveur applicatif en amont — souvent parce que ce backend a planté ou a retourné une sortie malformée.
503Service UnavailableSignifie que le serveur est temporairement incapable de traiter la requête (surchargé ou en maintenance). Comme le 429, la réponse peut inclure un en-tête Retry-After indiquant aux clients et aux robots d'exploration quand réessayer, ce qui explique pourquoi le 503 est le code adapté au SEO à utiliser lors d'une indisponibilité planifiée.
504Gateway TimeoutSignifie qu'un serveur agissant comme passerelle, proxy inverse ou répartiteur de charge n'a pas reçu de réponse à temps du serveur en amont. Il pointe vers un backend lent ou non réactif plutôt que vers le proxy lui-même.
505HTTP Version Not SupportedSignifie que la version du protocole HTTP utilisée dans la requête n'est pas prise en charge par le serveur.
507Insufficient StorageUn code WebDAV signifiant que le serveur ne peut pas stocker la représentation nécessaire pour compléter la requête (espace de stockage insuffisant).
508Loop DetectedUn code WebDAV signifiant que le serveur a détecté une boucle infinie lors du traitement de la requête et l'a interrompue.
511Network Authentication RequiredSignifie que le client doit s'authentifier pour accéder au réseau (souvent rencontré derrière un portail captif Wi-Fi).

Chapitres associés

Le statut retourné par un serveur dépend souvent de la requête elle-même. Pour aller plus loin, consultez :

  • Méthodes HTTP — GET, POST et autres, qui déterminent le comportement de certaines redirections (302 vs 307).
  • Formulaires HTML — comment les soumissions de formulaires déclenchent des requêtes pouvant retourner 303, 422 ou 429.
  • URL HTML (Uniform Resource Locators) — les adresses vers lesquelles pointent les redirections 3xx et les réponses 404.

Exercice

Pratique
Un utilisateur connecté demande une page qu'il n'est pas autorisé à voir. Quel code de statut le serveur doit-il retourner ?
Un utilisateur connecté demande une page qu'il n'est pas autorisé à voir. Quel code de statut le serveur doit-il retourner ?
Pratique
Vous déplacez définitivement une page vers une nouvelle URL et souhaitez que les moteurs de recherche transmettent les signaux de classement à la nouvelle adresse. Quel code de redirection devez-vous utiliser ?
Vous déplacez définitivement une page vers une nouvelle URL et souhaitez que les moteurs de recherche transmettent les signaux de classement à la nouvelle adresse. Quel code de redirection devez-vous utiliser ?
Pratique
Un POST de formulaire réussit et le serveur souhaite dire au navigateur d'effacer les champs du formulaire sans envoyer de nouveau contenu de page. Quel code de statut convient le mieux ?
Un POST de formulaire réussit et le serveur souhaite dire au navigateur d'effacer les champs du formulaire sans envoyer de nouveau contenu de page. Quel code de statut convient le mieux ?
Was this page helpful?