Un tableau consultable de chaque code de statut HTTP enregistré, sa phrase de raison exacte et la section RFC qui le définit. Filtrez par classe 1xx à 5xx.
Que signifie réellement ce code de réponse ? Saisissez un numéro comme 429 ou un mot comme passerelle pour filtrer le tableau, ou restreignez-le à une seule classe. Chaque ligne affiche le code, la phrase de raison exacte qui circule sur le fil, et la section de spécification qui le définit.
Codes correspondants–
CodePhrase de raisonDéfini dans
Aucun code de statut ne correspond à cette recherche.
Lire correctement les codes de statut HTTP
Le chiffre de classe porte le contrat
Chaque réponse HTTP commence par un code à trois chiffres, et le premier chiffre est la seule partie qu'un client est tenu de comprendre. La RFC 9110 est explicite à ce sujet : un client recevant un 499 non reconnu doit le traiter exactement comme un 400, car la classe définit la sémantique et les deux chiffres restants ne font que la préciser. C'est cette règle qui garde le protocole extensible. Un proxy écrit en 2005 peut encore router un 451 correctement sans savoir ce qu'est la censure légale.
Les cinq classes se divisent nettement selon qui est responsable de la suite
Un 1xx est une réponse intermédiaire, donc la vraie réponse arrive encore et la connexion reste ouverte. Un 2xx signifie que la requête a réussi et le client peut s'arrêter. Un 3xx renvoie une redirection, donc le client doit réessayer ailleurs. Un 4xx blâme la requête, donc la répéter inchangée échouera à nouveau. Un 5xx blâme le serveur, donc la requête identique pourrait réussir à la nouvelle tentative. C'est pourquoi la logique de nouvelle tentative s'appuie sur la classe plutôt que sur le code précis : réessayer un 503 est raisonnable, réessayer un 403 est un bug.
Codes couramment confondus
La distinction entre 301 et 308, ou 302 et 307, n'est pas stylistique. La paire ancienne permet à un client de réécrire un POST en GET en suivant la redirection, ce que les navigateurs ont historiquement fait. La paire plus récente interdit cette réécriture et préserve à la fois la méthode et le corps. Si vous déplacez un point de terminaison de formulaire avec un 301, certains clients convertiront silencieusement la soumission en GET et perdront la charge utile. Utilisez 308 ou 307 pour tout ce qui n'est pas idempotent.
401 et 403 sont aussi mélangés. Un 401 signifie que la requête n'était pas authentifiée et doit arriver avec un défi WWW-Authenticate, indiquant au client comment réessayer avec des identifiants. Un 403 signifie que le serveur a compris qui vous êtes et refuse encore. Envoyer un 401 sans en-tête de défi est une violation de spécification, et envoyer un 403 quand l'utilisateur a simplement oublié de se connecter rend l'échec bien plus difficile à déboguer.
La classe 4xx contient aussi une paire réellement utile : 400 contre 422. Un 400 signifie que la requête n'a pas pu être parsée du tout, donc la syntaxe est cassée. Un 422 signifie que la syntaxe s'est bien parsée mais le contenu a échoué la validation. Séparer les deux transforme un échec opaque en un échec actionnable pour les clients API.
Les phrases de raison sont pour les humains uniquement
Le texte à côté du code, comme Not Found ou I'm a teapot, est la phrase de raison. HTTP/1.1 l'envoie sur la ligne de statut, mais HTTP/2 et HTTP/3 l'ont totalement supprimée, donc une connexion moderne transporte souvent le numéro sans aucune phrase. Rien dans un client ne doit jamais brancher sur cette chaîne. Elle existe pour qu'un humain lisant un journal ou une trace brute puisse voir ce qui s'est passé sans table de recherche.
Certains codes sont aussi plus contraints qu'ils n'y paraissent. Un 204 et un 304 ne doivent pas inclure de corps de message, donc un intermédiaire qui en ajoute produit une réponse invalide. Une réponse HEAD ne transporte jamais de corps quel que soit le code. Ces règles de trame comptent car un corps là où aucun n'est attendu désynchronise la réutilisation de connexion, ce qui apparaît comme une corruption bizarre entre requêtes plutôt qu'une erreur évidente.
FAQ
Combien de codes de statut HTTP existent ?
L'IANA liste un peu plus de soixante codes enregistrés à travers les cinq classes, et ce tableau couvre tous ainsi que quelques codes WebDAV et d'extension largement déployés. Le registre est intentionnellement ouvert, donc de nouveaux codes peuvent être ajoutés, ce qui est exactement pourquoi les clients doivent revenir au chiffre de classe pour tout ce qui est inconnu.
Dois-je utiliser 301 ou 308 pour une redirection permanente ?
Utilisez 308 à moins que vous ne vouliez spécifiquement que les anciens clients convertissent POST en GET. Les deux signifient que la ressource a été déplacée de façon permanente, mais seul 308 garantit que la méthode et le corps survivent à la redirection. Pour un déplacement de page simple, l'un ou l'autre fonctionne, et 301 a un support hérité légèrement plus large.
Quelle est la différence entre 401 et 403 ?
Un 401 signifie que vous n'êtes pas authentifié et la réponse doit inclure un en-tête WWW-Authenticate décrivant comment. Un 403 signifie que vous êtes bien authentifié et n'êtes toujours pas autorisé. Si un utilisateur doit simplement se connecter, 401 est correct ; si son compte manque réellement de permission, 403 est correct.
418 I'm a teapot est-il un vrai code de statut ?
Il est réel au sens où la RFC 2324 le définit pour le Hyper Text Coffee Pot Control Protocol, une spécification poisson d'avril de 1998. L'IANA le garde réservé pour que rien d'autre ne puisse revendiquer 418. Il ne fait pas partie du HTTP proprement dit, mais plusieurs frameworks l'implémentent comme easter egg.
Réessayez sur 408, 429 et la plupart des réponses 5xx, et respectez toujours un en-tête Retry-After quand il est présent. Ne réessayez pas les codes 4xx autres que 408 et 429, car la requête elle-même est le problème et la répéter inchangée échouera de façon identique.
Pourquoi ma réponse HTTP/2 n'a-t-elle pas de phrase de raison ?
HTTP/2 et HTTP/3 ont supprimé la phrase de raison du format sur le fil car aucun client n'était censé la parser. Seul le code numérique est transmis. Les outils qui affichent une phrase pour une réponse HTTP/2 la recherchent localement dans une table comme celle-ci.