Aller au contenu

Codes de statut HTTP

Une réponse HTTP commence par un code à trois chiffres et une courte phrase de raison. Le premier chiffre est le résumé complet : 1xx est provisoire, 2xx a réussi, 3xx pointe ailleurs, 4xx blâme la demande, 5xx blâme le serveur. Si vous vous souvenez seulement de cela, vous pouvez lire un journal que vous n'avez jamais vu avant.

Les phrases de raison ici sont celles des RFC, en anglais, parce que c'est ce qui circule sur le fil — un serveur envoie "Not Found", pas une traduction, et une phrase que vous grepez dans un journal doit correspondre aux octets qui ont été réellement envoyés.

Les distinctions qui causent des problèmes réels sont à l'intérieur des classes plutôt qu'entre elles : 401 versus 403, 301 versus 308, et 502 versus 503 chacun répond à une question différente sur ce qu'il faut faire ensuite, et chacun est routinièrement utilisé pour l'autre.

1xx — Informationnel

3

Provisoire : la réponse n'est pas définitive et une autre suit.

CodePhrase de raisonCe que cela signifie
100ContinueEn-têtes reçus, continuez à envoyer le corps.
101Switching ProtocolsProtocoles de commutation — la poignée de main WebSocket.
103Early HintsPremiers indices : préchargez ces ressources pendant que la véritable réponse est préparée.

2xx — Succès

5

La demande a été reçue, comprise et acceptée.

CodePhrase de raisonCe que cela signifie
200OKSuccès, avec un corps.
201CreatedCréé.Doit porter un en-tête Location pointant vers la nouvelle ressource.
202AcceptedAccepté pour traitement, qui ne s'est pas encore produit.
204No ContentSuccès, et délibérément pas de corps.La bonne réponse à un DELETE, ou à un enregistrement qui n'a rien à renvoyer.
206Partial ContentContenu partiel — la réponse à une demande Range. Téléchargements reprennent.

3xx — Redirection

6

La ressource se trouve ailleurs, ou votre copie en cache est toujours bonne.

CodePhrase de raisonCe que cela signifie
301Moved PermanentlyDéplacé de façon permanente. Mettez à jour vos liens ; les caches peuvent garder cela pour toujours.
302FoundTrouvé — une redirection temporaire.Largement implémentée comme passage de la méthode à GET, ce que 307 corrige.
303See OtherVoir l'autre : récupérez le résultat avec GET. La redirection après un POST de formulaire.
304Not ModifiedNon modifié — votre copie en cache est actuelle. Envoyé sans corps.
307Temporary RedirectRedirection temporaire, méthode et corps conservés.
308Permanent RedirectRedirection permanente, méthode et corps conservés.

4xx — Erreur client

14

La demande est le problème. La répéter sans changement échouera à nouveau.

CodePhrase de raisonCe que cela signifie
400Bad RequestLe serveur n'a pas pu analyser la demande du tout.
401UnauthorizedNon authentifié — le serveur ne sait pas qui vous êtes.Nommé Unauthorized, mais cela signifie non authentifié. Doit inclure WWW-Authenticate.
403ForbiddenAuthentifiés et toujours pas autorisés. De meilleures identifiants n'aideront pas.
404Not FoundAucune ressource de ce type, et le serveur ne dira pas s'il y en a jamais eu une.
405Method Not AllowedMauvaise méthode pour cette URL.Doit énumérer celles qui fonctionnent dans un en-tête Allow.
406Not AcceptableRien disponible dans un format que votre en-tête Accept acceptera.
409ConflictConflit avec l'état actuel — une modification par rapport à une version obsolète.
410GoneDisparu : il existait et a été délibérément supprimé. Plus fort que 404.
413Content Too LargeLe corps est plus grand que le serveur n'accepte.
415Unsupported Media TypeLe serveur ne traite pas ce Content-Type.
418I'm a teapotJe suis une théière. Une blague des poissons d'avril 1998, réservée à jamais.
422Unprocessable ContentAnalysé correctement, le contenu invalide — un champ manquant, une mauvaise valeur.
429Too Many RequestsLimitée en débit.Recherchez Retry-After avant de relancer, et reculez exponentiellement.
451Unavailable For Legal ReasonsBloqué pour des raisons légales. Le numéro est un clin d'œil à Fahrenheit 451.

5xx — Erreur serveur

6

La demande peut être fine. Ce sont ceux qui valent la peine d'être relancés.

CodePhrase de raisonCe que cela signifie
500Internal Server ErrorUne erreur non gérée sur le serveur. Rien à corriger de votre côté.
501Not ImplementedLe serveur n'implémente pas cette méthode du tout.
502Bad GatewayUn proxy a atteint le serveur en amont et a obtenu quelque chose d'inutilisable.
503Service UnavailableDélibérément pas de service — surchargé ou en maintenance.Le statut qui devrait porter Retry-After.
504Gateway TimeoutUn proxy a abandonné l'attente du serveur en amont.
505HTTP Version Not SupportedLa version HTTP dans la demande n'est pas prise en charge.

FAQ

Quelle est la différence entre 401 et 403 ?
401 Unauthorized signifie que la demande n'a pas été authentifiée — le serveur ne sait pas qui vous êtes, et un 401 correct inclut un en-tête WWW-Authenticate vous indiquant comment le prouver. 403 Forbidden signifie qu'il sait exactement qui vous êtes et vous ne pouvez toujours pas l'avoir. Réessayer un 403 avec de meilleures identifiants pour la même identité n'aidera pas.
Dois-je utiliser 301 ou 308 pour une redirection ?
308 si la méthode compte. Historiquement, 301 et 302 ont été largement mis en œuvre comme "redirection et passage à GET", ce qui transforme silencieusement un POST en GET. 307 et 308 ont été introduits pour promettre que la méthode et le corps sont conservés. Pour un déplacement permanent d'une page qui n'est jamais récupérée, 301 reste le choix le plus compris.
Que signifie 422 que 400 ne fait pas ?
400 Bad Request signifie que le serveur n'a pas pu comprendre la demande du tout — JSON mal formé, un en-tête cassé. 422 Unprocessable Content signifie qu'il s'est analysé correctement et le contenu est de toute façon mauvais : un corps bien formé avec un champ obligatoire manquant ou une date dans le passé. La division est utile précisément parce que la correction du client est différente dans chaque cas.
Est-ce que 418 est un code de statut réel ?
C'est réel en ce sens qu'il est enregistré et chaque bibliothèque HTTP le connaît, et c'est une blague en ce sens qu'il provient du Protocole de commande de théière HTTP de poisson d'avril 1998. Les tentatives de réclamer le numéro pour un usage pratique ont été rejetées, il est donc réservé de façon permanente aux théières.
Pourquoi 503 est-il différent de 502 ?
502 Bad Gateway signifie qu'un proxy a atteint le serveur en amont et a obtenu quelque chose d'inutilisable. 503 Service Unavailable signifie que le serveur lui-même ne sert pas volontairement en ce moment — surchargé ou en maintenance — et c'est celui qui devrait porter un en-tête Retry-After, car c'est celui qui devrait récupérer.