Aussi disponible en : English · Español · Português · العربية
Codes de statut HTTP
La liste complète du registre de l’IANA, avec les quatre états que presque toutes les tables confondent en un seul.
Qu’est-ce qu’un code de statut HTTP ?
Toute réponse HTTP commence par un nombre à trois chiffres indiquant comment les choses se sont passées. Le premier chiffre donne la classe : 1xx signifie que le serveur travaille encore, 2xx que tout s’est bien passé, 3xx qu’il faut aller ailleurs, 4xx que la requête était fautive et 5xx que c’était le serveur. Le nombre est ce que le logiciel interprète ; la phrase à côté est pour les humains.
La liste qui fait foi est le registre des codes de statut HTTP de l’IANA, et cette page en est générée plutôt qu’écrite de mémoire. Cela compte plus qu’il n’y paraît, car le registre consigne quatre états distincts et presque toutes les tables publiées les aplatissent en une seule liste de codes que vous pourriez employer.
Comment utiliser cette liste
- Cherchez par nombre ou par phrase. Les nombres se cherchent par le début : taper 40 vous donne toute la famille 40x, et 404 la réduit à un seul. Le texte se cherche n’importe où dans la phrase — essayez gateway, ou legal.
- Regardez les étiquettes avant d’employer un code. Réservé signifie que le registre l’a mis de côté pour que personne ne s’en serve. Obsolète signifie qu’il a été enregistré puis retiré. Temporaire signifie que cet enregistrement porte une date d’expiration.
- Descendez sous le registre pour le reste. Les codes que vous avez croisés sans les trouver ci-dessus sont dans la section des éditeurs, chacun attribué au logiciel qui le renvoie, puis viennent les plages que l’IANA n’a attribuées à personne.
418 n’est pas un code pour rire que vous pouvez employer
Le fait le plus répété au sujet des codes HTTP est que 418 I’m a Teapot est un poisson d’avril de 1998 et que vous êtes libre de le renvoyer pour l’amusement. La première moitié est vraie. La seconde est à l’envers, et le registre le dit sans détour : 418 y figure, sa description est (Unused) et sa référence est la section 15.5.19 du RFC 9110. Il est au registre précisément pour ne jamais pouvoir être attribué à quoi que ce soit de réel.
C’est un état différent de « non attribué », et cette distinction est la raison d’être de cette page. 306 est dans la même situation : réservé, inutilisable définitivement. 510 Not Extended relève d’un troisième état : il a bel et bien été enregistré, puis son expérience a été reclassée comme Historique, si bien qu’il apparaît comme obsolète. Et 104 Upload Resumption Supported relève d’un quatrième : un enregistrement temporaire qui expire le 13 novembre 2026 et peut tout simplement disparaître.
Retirez tout cela et il reste 61 codes qu’un serveur devrait réellement renvoyer, sur 64 lignes de registre. Une table qui présente les 64 sur un pied d’égalité vous invite à employer deux codes qui existent pour être inutilisables.
Les codes qui ne sont pas du tout au registre
Les tables publiées ont un second défaut : les codes qu’elles ajoutent. 420, 444, 499 et la famille 52x figurent dans la plupart des listes comme s’ils voisinaient 404. L’IANA n’en a attribué aucun. Pour 420, le registre est même explicite en sens inverse : 419-420 est l’une des onze plages marquées non attribuées.
Ils ne sont pas inventés pour autant : ce sont de véritables comportements de logiciels précis, d’où leur section propre ici avec le logiciel nommé. 499, c’est nginx notant que le client a raccroché avant que la réponse soit prête. 444, c’est nginx fermant la connexion sans répondre du tout. La famille 52x est de Cloudflare, et sa propre documentation d’assistance énumère 520 à 526 et 530 à côté des codes 5xx normalisés sans jamais préciser qu’ils ne sont pas enregistrés, ce qui explique une bonne part de leur diffusion.
La conséquence pratique est simple. Tout code d’une plage non attribuée est libre pour votre usage interne, et il restera une extension privée et non une norme : aucune bibliothèque cliente ne saura ce que vous entendez par là.
Limites honnêtes
Ceci est un instantané. Le registre évolue : 451 a été ajouté en 2016, 103 en 2017, et 104 est arrivé en 2024 comme enregistrement temporaire, date d’expiration déjà attachée. La date de génération de la liste est imprimée en bas, et le script qui l’a produite est dans le dépôt : la page peut donc dire quand elle était exacte plutôt que de laisser croire qu’elle le restera.
Les phrases de statut sont celles du registre, en anglais, et ne sont délibérément pas traduites dans les autres versions de cette page. La phrase circule sur le fil comme partie du protocole — un serveur envoie Not Found, pas « Non trouvé » —, de sorte que la traduire décrirait quelque chose qu’aucun serveur ne renvoie. Ce qui est traduit, c’est l’explication autour ; le protocole ne l’est pas.
La table des éditeurs est la seule partie qui ne provienne pas d’un registre, faute de registre d’où la tirer. Chaque ligne vient de la documentation de l’éditeur concerné. Elle n’est pas exhaustive et ne peut pas l’être, puisque n’importe qui peut renvoyer le nombre qu’il veut.
Pourquoi est-ce gratuit ?
Parce que c’est une liste. Toute la page est du texte statique avec un champ de recherche qui la filtre dans votre navigateur : rien n’est envoyé, rien n’est conservé, et aucun serveur n’intervient pour la lire.
Il n’y a donc ni compte, ni inscription, ni quoi que ce soit derrière un mur. Le registre sous-jacent est un document public tenu par l’IANA, et une liste de faits publics ne devrait pas avoir de péage devant elle.