Codes de statut HTTP : guide de référence
Chaque réponse HTTP commence par un code de statut à trois chiffres (aussi appelé code d’état HTTP, ou simplement code HTTP) qui indique au client ce qui s’est passé. Parcourez les codes par classe, avec des explications claires, des exemples de réponses et ce que chacun implique pour les redirections et le SEO.
1xx Information
La requête a été reçue et son traitement se poursuit. Ces réponses intermédiaires arrivent avant la réponse finale et ne terminent jamais une chaîne de redirections.
- 100
Continue
Réponse intermédiaire : le serveur accepte les en-têtes, et le client, qui a envoyé « Expect: 100-continue », peut maintenant envoyer le corps de la requête. - 101
Switching Protocols
Le serveur accepte la demande Upgrade du client et bascule la connexion vers un autre protocole, en pratique presque toujours WebSocket. - 102
Processing
Réponse intermédiaire WebDAV obsolète qui indique au client que le serveur traite encore une longue requête et qu’il doit continuer à patienter. - 103
Early Hints
Réponse intermédiaire qui envoie des en-têtes Link avant la réponse finale : le navigateur précharge ou se préconnecte pendant que le serveur travaille encore.
2xx Succès
La requête a été reçue, comprise et acceptée. Une chaîne de redirections saine se termine sur l’un de ces codes, le plus souvent 200 OK.
- 200
OK
La requête a abouti ; pour un GET, le corps contient la ressource demandée. Toute chaîne de redirections devrait se terminer sur une URL qui renvoie 200. - 201
Created
La requête a abouti et a créé une nouvelle ressource, généralement après un POST ou un PUT. L’en-tête Location, s’il est présent, pointe vers cette ressource. - 202
Accepted
La requête a été acceptée pour traitement, mais n’est pas encore terminée. Utilisé pour les tâches asynchrones ; le résultat final n’est pas garanti. - 203
Non-Authoritative Information
La requête a abouti, mais un proxy de transformation a modifié la réponse : le contenu n’est pas exactement celui envoyé par le serveur d’origine. - 204
No Content
La requête a abouti et il n’y a aucun contenu à renvoyer. Le navigateur reste sur la page actuelle ; courant pour DELETE, les beacons et le preflight CORS. - 205
Reset Content
La requête a abouti et le client doit réinitialiser l’affichage du document, par exemple vider le formulaire qui vient d’être envoyé. - 206
Partial Content
Le serveur n’envoie que les plages d’octets demandées par le client avec un en-tête Range, comme pour le streaming vidéo et les téléchargements reprenables. - 207
Multi-Status
Réponse WebDAV qui fournit un code de statut distinct pour chacune de plusieurs ressources ou propriétés, dans un corps XML multistatus. - 208
Already Reported
Utilisé dans une réponse WebDAV 207 : les membres de cette collection ont déjà été listés, ce qui évite des répétitions sans fin quand des liaisons bouclent. - 226
IM Used
Le serveur a répondu à un GET par un encodage différentiel (RFC 3229) : le corps ne contient que les modifications depuis une version que le client possède.
3xx Redirection
Le client doit effectuer une action supplémentaire, en général demander l’URL indiquée dans l’en-tête Location. Ce sont ces codes qui composent une chaîne de redirections.
- 300
Multiple Choices
La ressource a plusieurs représentations et le client peut en choisir une. Les navigateurs ne suivent pas un 300 automatiquement, même avec un en-tête Location. - 301
Moved Permanently
La ressource a une nouvelle URL permanente, indiquée dans l’en-tête Location. Les clients et les moteurs de recherche doivent désormais utiliser cette URL. - 302
Found
La ressource se trouve temporairement à une autre URL. Les clients suivent l’en-tête Location, mais doivent continuer à utiliser l’URL d’origine par la suite. - 303
See Other
Redirige le client vers une autre URL à récupérer avec GET, en général pour afficher une page de résultat après l’envoi d’un formulaire (Post/Redirect/Get). - 304
Not Modified
Réponse à un GET ou HEAD conditionnel : la copie en cache du client est toujours valide, le serveur n’envoie donc aucun corps et cette copie est réutilisée. - 305
Use Proxy
Obsolète. Demandait au client de répéter la requête via le proxy indiqué dans Location ; les navigateurs l’ignorent pour des raisons de sécurité. - 306
Inutilisé (anciennement Switch Proxy)
Réservé et inutilisé. Proposé jadis sous le nom « Switch Proxy » puis abandonné, le code 306 ne doit pas servir ; les clients le traitent comme un 3xx inconnu. - 307
Temporary Redirect
Redirection temporaire : la requête est répétée à l’URL Location avec la même méthode et le même corps, contrairement à la 302, qui peut changer POST en GET. - 308
Permanent Redirect
Redirection permanente qui conserve la méthode et le corps. Comme pour la 301, la nouvelle URL fait désormais foi, mais un POST ne devient jamais un GET.
4xx Erreur du client
La requête ne peut pas aboutir telle qu’elle a été envoyée : la page n’existe pas, l’accès est refusé ou le client a envoyé trop de requêtes.
- 400
Bad Request
Le serveur refuse de traiter la requête à cause d’une erreur du client : syntaxe incorrecte, URL invalide ou cookies trop volumineux, par exemple. - 401
Unauthorized
La requête exige une authentification valide. Le serveur doit indiquer dans l’en-tête WWW-Authenticate comment s’authentifier, par exemple Basic ou Bearer. - 402
Payment Required
Réservé par HTTP pour un usage futur. En pratique, certaines API et certains services l’utilisent quand un paiement, du crédit ou un abonnement est requis. - 403
Forbidden
Le serveur a compris la requête mais refuse de l’autoriser. Contrairement au code 401, renvoyer simplement les mêmes identifiants ne servira à rien. - 404
Not Found
Le serveur n’a rien à cette URL, ou refuse de dire si quelque chose existe. Ce code n’indique pas si l’absence est temporaire ou définitive. - 405
Method Not Allowed
L’URL existe, mais n’accepte pas la méthode HTTP utilisée, par exemple un POST sur une page statique. L’en-tête Allow liste les méthodes prises en charge. - 406
Not Acceptable
Le serveur ne peut pas produire de réponse conforme aux en-têtes Accept du client (format, langue, encodage) et refuse d’envoyer une version par défaut. - 407
Proxy Authentication Required
Comme 401, mais c’est un proxy entre le client et le serveur qui exige l’authentification. L’en-tête Proxy-Authenticate indique comment s’authentifier. - 408
Request Timeout
Le serveur n’a pas reçu de requête complète à temps et ferme la connexion. Le client peut renvoyer la requête sur une nouvelle connexion. - 409
Conflict
La requête entre en conflit avec l’état actuel de la ressource : conflit de modification, enregistrement en double ou incohérence de version, par exemple. - 410
Gone
La ressource a été supprimée volontairement et ne devrait pas revenir. Un signal plus explicite et plus définitif que 404 Not Found. - 411
Length Required
Le serveur refuse une requête qui comporte un corps mais pas d’en-tête Content-Length. Le client peut la renvoyer avec un Content-Length valide. - 412
Precondition Failed
Une condition des en-têtes de la requête, comme If-Match ou If-Unmodified-Since, s’est révélée fausse : le serveur n’a donc pas appliqué la modification. - 413
Content Too Large
Le corps de la requête dépasse ce que le serveur accepte, comme un fichier trop lourd. Anciens noms : « Payload Too Large » et « Request Entity Too Large ». - 414
URI Too Long
L’URL demandée est plus longue que ce que le serveur accepte de traiter, par exemple parce qu’une boucle de redirection y ajoute sans cesse des paramètres. - 415
Unsupported Media Type
Le serveur refuse le corps de la requête, car son format (Content-Type) ou son codage de contenu (Content-Encoding) n’est pas pris en charge. - 416
Range Not Satisfiable
La plage d’octets de l’en-tête Range se situe hors du fichier, par exemple quand un téléchargement reprend au-delà de la fin d’un fichier modifié. - 417
Expectation Failed
Le serveur ne peut pas satisfaire l’attente exprimée dans l’en-tête Expect. En pratique, cela signifie que « Expect: 100-continue » n’est pas pris en charge. - 418
I'm a Teapot
Un poisson d’avril de 1998 issu du protocole de contrôle des cafetières (RFC 2324). Réservé et inutilisé en HTTP, mais certains sites le renvoient exprès. - 421
Misdirected Request
La requête a atteint un serveur qui ne peut pas répondre pour ce nom d’hôte, souvent à cause d’un SNI TLS incohérent ou d’une connexion HTTP/2 réutilisée. - 422
Unprocessable Content
La requête est bien formée, mais son contenu est sémantiquement invalide : en général une erreur de validation d’API. Anciennement « Unprocessable Entity ». - 423
Locked
WebDAV : la ressource est verrouillée et la méthode ne peut pas s’appliquer pour l’instant. Il faut le jeton de verrou ou attendre la levée du verrou. - 424
Failed Dependency
WebDAV : la méthode n’a pas pu être exécutée, car une autre action dont elle dépendait a échoué, par exemple une seule propriété d’un PROPPATCH. - 425
Too Early
Le serveur refuse de traiter une requête envoyée en early data TLS (0-RTT), car elle pourrait être rejouée. Le client réessaie après la négociation TLS. - 426
Upgrade Required
Le serveur refuse de traiter la requête avec le protocole actuel et exige le passage au protocole indiqué dans l’en-tête Upgrade. - 428
Precondition Required
Le serveur exige que la requête soit conditionnelle (If-Match) pour éviter les mises à jour perdues lorsque plusieurs clients modifient la même ressource. - 429
Too Many Requests
Le client a envoyé trop de requêtes sur une période donnée (limitation de débit). Un en-tête Retry-After peut indiquer le délai avant de réessayer. - 431
Request Header Fields Too Large
Le serveur refuse la requête, car ses en-têtes sont trop volumineux, généralement parce que le navigateur envoie trop de cookies ou des cookies trop gros. - 444
No Response
nginx Code nginx non standard : le serveur ferme la connexion sans envoyer de réponse. Les clients reçoivent une réponse vide et ne voient jamais de 444. - 451
Unavailable For Legal Reasons
Accès refusé en raison d’une exigence légale, comme une décision de justice ou un blocage gouvernemental. Clin d’œil au roman Fahrenheit 451 de Ray Bradbury. - 499
Client Closed Request
nginx Code non standard que nginx inscrit dans son journal d’accès lorsque le client a fermé la connexion avant que le serveur ait envoyé sa réponse.
5xx Erreur du serveur
Le serveur n’a pas réussi à traiter une requête apparemment valide. Des erreurs 5xx persistantes bloquent aussi bien les visiteurs que les robots d’exploration.
- 500
Internal Server Error
Défaillance générique côté serveur : un problème est survenu sur le serveur, comme le plantage d’une application ou un fichier de configuration défectueux. - 501
Not Implemented
Le serveur ne prend pas en charge la fonctionnalité nécessaire pour satisfaire la requête, en général une méthode HTTP qu’il ne reconnaît pas. - 502
Bad Gateway
Une passerelle ou un proxy a reçu une réponse invalide du serveur en amont, par exemple parce que l’application placée derrière nginx a planté. - 503
Service Unavailable
Le serveur ne peut temporairement pas traiter la requête en raison d’une surcharge ou d’une maintenance. Retry-After peut indiquer quand réessayer. - 504
Gateway Timeout
Une passerelle ou un proxy n’a pas reçu à temps de réponse du serveur en amont, généralement parce que l’application est trop lente. - 505
HTTP Version Not Supported
Le serveur ne prend pas en charge (ou refuse) la version majeure de HTTP utilisée. Aujourd’hui, ce code trahit souvent une ligne de requête mal formée. - 506
Variant Also Negotiates
Erreur de configuration du serveur en négociation de contenu transparente (RFC 2295) : la variante choisie est elle-même négociable, d’où une boucle. - 507
Insufficient Storage
WebDAV : le serveur ne peut pas stocker les données nécessaires pour terminer la requête, par exemple parce qu’un disque ou un quota utilisateur est plein. - 508
Loop Detected
WebDAV : le serveur a interrompu une opération Depth: infinity, car il a détecté une boucle infinie de liaisons. Aucun lien avec les boucles de redirection. - 510
Not Extended
Issu du HTTP Extension Framework, obsolète (RFC 2774) : la requête ne déclare pas une extension requise. Code historique et pratiquement inutilisé. - 511
Network Authentication Required
Le réseau, souvent le portail captif d’un Wi-Fi, exige une connexion avant de donner accès. Envoyé par le réseau qui intercepte, pas par le serveur d’origine. - 520
Web Server Returned an Unknown Error
Cloudflare Spécifique à Cloudflare : le serveur d’origine a renvoyé une réponse vide, inconnue ou inattendue, par exemple après un plantage ou une connexion réinitialisée. - 521
Web Server Is Down
Cloudflare Spécifique à Cloudflare : le serveur d’origine a refusé la connexion de Cloudflare, généralement parce que le serveur web est arrêté ou bloque Cloudflare. - 522
Connection Timed Out
Cloudflare Spécifique à Cloudflare : la connexion TCP avec le serveur d’origine n’a pas pu s’établir à temps, ou l’origine n’a pas accusé réception de la requête. - 523
Origin Is Unreachable
Cloudflare Spécifique à Cloudflare : le serveur d’origine est totalement injoignable, en général à cause d’un problème de routage ou d’une adresse IP erronée dans le DNS. - 524
A Timeout Occurred
Cloudflare Spécifique à Cloudflare : connexion établie avec le serveur d’origine, mais aucune réponse HTTP avant le délai de lecture (environ deux minutes par défaut). - 525
SSL Handshake Failed
Cloudflare Spécifique à Cloudflare : la négociation TLS entre Cloudflare et le serveur d’origine a échoué, par exemple faute de certificat valide sur l’origine. - 526
Invalid SSL Certificate
Cloudflare Spécifique à Cloudflare : en mode Full (strict), Cloudflare n’a pas pu valider le certificat de l’origine (expiré, auto-signé ou émis pour un autre nom). - 530
Erreur Cloudflare 1xxx
Cloudflare Spécifique à Cloudflare : envoyé avec une erreur Cloudflare 1xxx, par exemple 1016 (Origin DNS error) ou 1033 (Cloudflare Tunnel error).
Comment lire un code de statut HTTP
Le premier chiffre indique la classe de la réponse, et les deux suivants précisent sa signification exacte au sein de cette classe. Un client qui ne reconnaît pas un code donné le traite comme le code x00 de sa classe : un code 4xx inconnu est donc traité comme un 400 Bad Request.
Le message de statut qui suit le nombre, comme Not Found ou Moved Permanently, n’est qu’une description destinée aux humains. Les clients se fient uniquement au nombre, et HTTP/2 et HTTP/3 n’envoient d’ailleurs aucun message de statut.
Les codes de redirection en un coup d’œil
- 301 Moved Permanently : redirection permanente ; les navigateurs peuvent transformer un POST en GET. Le choix par défaut pour une page déplacée.
- 302 Found : redirection temporaire ; la méthode peut changer. Le code par défaut de nombreux frameworks.
- 303 See Other : redirection temporaire ; toujours suivie avec GET. Utilisée après l’envoi d’un formulaire.
- 307 Temporary Redirect : redirection temporaire ; la méthode et le corps de la requête sont conservés.
- 308 Permanent Redirect : redirection permanente ; la méthode et le corps de la requête sont conservés.
- 304 Not Modified : pas une redirection vers une autre URL, mais un signal indiquant que la copie en cache du client est toujours valide.
Pour savoir quand utiliser chacun d’eux, lisez notre guide des codes de redirection HTTP.
Les codes de statut dans une chaîne de redirections
Une chaîne de redirections est une suite de réponses 3xx qui se termine par une réponse finale. Seul le dernier code de statut correspond à ce que le visiteur ou le robot d’exploration obtient réellement : une chaîne qui aboutit à un code 404 est donc un lien cassé, aussi propres que paraissent les redirections qui la précèdent. Utilisez le vérificateur de redirections d’URL pour voir le code de statut de chaque saut (chaque étape de la chaîne), ou le Vérificateur de redirections en masse pour contrôler de nombreuses URL à la fois.
Vérificateur de redirections d’URL
Affichez chaque code de statut que renvoie une URL, saut par saut, avec le vérificateur de redirections gratuit de TrueURL.