MiServe DevTools

Vos autocollants

Épinglez vos outils ici. Ils sont enregistrés dans ce navigateur.

Liste des codes d'état HTTP

Les codes d'état HTTP de 100 à 511, avec ce que chacun signifie pour un développeur et la RFC qui le définit, ainsi que les codes non standard utilisés par nginx, Cloudflare et d'autres produits.

78 codes d'état.

1xx Information

Le serveur a reçu la requête et la traite encore. Ce sont des réponses provisoires, envoyées avant la réponse définitive.

100 Continue
Le serveur a reçu les en-têtes de la requête et le client peut envoyer le corps. Le client le demande en envoyant Expect: 100-continue avant un upload volumineux. RFC 9110
101 Switching Protocols
Le serveur accepte de changer de protocole sur cette connexion, comme le demandait l'en-tête Upgrade. C'est ainsi que démarre une connexion WebSocket. RFC 9110
102 Processing
Le serveur a accepté une requête WebDAV et la traite encore, pour que le client n'abandonne pas sur un timeout. La spécification WebDAV actuelle ne l'inclut plus et il est rarement envoyé. RFC 2518
103 Early Hints
Envoyé avant la réponse définitive avec des en-têtes Link, pour que le navigateur commence à précharger des ressources ou à ouvrir des connexions pendant que le serveur prépare la page. RFC 8297

2xx Succès

La requête a été reçue, comprise et acceptée.

200 OK
La requête a réussi. Le corps contient le résultat : la ressource pour un GET, ou le résultat de l'action pour un POST. RFC 9110
201 Created
La requête a créé une nouvelle ressource. L'en-tête Location donne en général son URL. RFC 9110
202 Accepted
La requête a été acceptée pour un traitement qui n'est pas terminé et peut encore échouer. C'est typique d'un travail mis en file d'attente. RFC 9110
203 Non-Authoritative Information
La requête a réussi, mais un proxy a modifié la réponse envoyée par le serveur d'origine. RFC 9110
204 No Content
La requête a réussi et il n'y a pas de corps à envoyer. Courant pour DELETE, et pour PUT ou PATCH quand le client connaît déjà le nouvel état. RFC 9110
205 Reset Content
La requête a réussi et le client doit réinitialiser la vue qui l'a envoyée, par exemple en vidant un formulaire. Il n'y a pas de corps. RFC 9110
206 Partial Content
Le corps ne contient que la plage d'octets demandée par l'en-tête Range. Il sert à reprendre un téléchargement et à se déplacer dans une vidéo. RFC 9110
207 Multi-Status
Le corps est un document XML qui donne un état distinct pour chacune des ressources concernées. Utilisé par WebDAV. RFC 4918
208 Already Reported
Dans une réponse WebDAV Multi-Status, signale les membres d'une liaison (binding) déjà listés, pour ne pas les répéter. RFC 5842
226 IM Used
Le corps est le résultat d'une ou plusieurs manipulations d'instance, comme un delta, appliquées à la ressource actuelle. Il relève du delta encoding de HTTP, rarement implémenté. RFC 3229

3xx Redirection

Le client doit effectuer une action supplémentaire pour aboutir, en général une requête vers une autre URL.

300 Multiple Choices
La ressource a plusieurs représentations et le client peut en choisir une. Ce code est rarement utilisé, faute de méthode standard pour faire ce choix. RFC 9110
301 Moved Permanently
Redirection permanente : la ressource a une nouvelle URL, indiquée dans l'en-tête Location, et les moteurs de recherche indexent généralement cette URL à sa place. Les clients peuvent transformer un POST en GET en suivant la redirection ; utilisez 308 pour conserver la méthode. RFC 9110
302 Found
Redirection temporaire : pour l'instant, la ressource se trouve à une autre URL, indiquée dans l'en-tête Location. Les clients peuvent transformer un POST en GET en suivant la redirection ; utilisez 307 pour conserver la méthode. RFC 9110
303 See Other
La réponse se trouve à une autre URL, que le client doit récupérer avec GET. C'est la redirection habituelle après le POST d'un formulaire, pour que recharger la page ne soumette pas le formulaire une seconde fois. RFC 9110
304 Not Modified
La copie dans le cache du client est toujours à jour, donc aucun corps n'est envoyé. Répond à une requête conditionnelle faite avec If-None-Match ou If-Modified-Since. RFC 9110
305 Use Proxy
La ressource doit être atteinte via le proxy indiqué dans l'en-tête Location. Ce code est déprécié pour des raisons de sécurité, et les clients ne doivent pas s'y fier. RFC 9110
306 (Unused)
Une ancienne version de la spécification utilisait ce code. Il n'est plus utilisé et le numéro reste réservé. RFC 9110
307 Temporary Redirect
Redirection temporaire : la ressource se trouve à une autre URL, et le client doit y répéter la requête avec la même méthode et le même corps. RFC 9110
308 Permanent Redirect
Redirection permanente : la ressource a une nouvelle URL définitive, et le client doit y répéter la requête avec la même méthode et le même corps. RFC 9110

4xx Erreur du client

Le problème vient du client : la requête est mal formée, n'a pas les droits nécessaires ou demande quelque chose qui ne peut pas être servi.

400 Bad Request
Le serveur ne peut pas traiter la requête, car elle est mal formée : syntaxe incorrecte, délimitation du message invalide ou corps impossible à analyser. RFC 9110
401 Unauthorized
La requête ne contient pas d'identifiants valides. L'en-tête WWW-Authenticate de la réponse indique comment s'authentifier. Malgré son nom, ce code concerne l'authentification, pas les autorisations. RFC 9110
402 Payment Required
Réservé pour un usage futur. Certaines API l'envoient quand un abonnement a pris fin ou qu'un quota payant est épuisé. RFC 9110
403 Forbidden
Le serveur a compris la requête et la refuse. Si la requête contenait des identifiants, ils ne donnent pas accès à cette ressource, et les renvoyer n'y changera rien. RFC 9110
404 Not Found
Le serveur n'a rien à cette URL, ou ne veut pas révéler ce qu'il y a. Le code ne dit pas si l'absence est définitive. RFC 9110
405 Method Not Allowed
La ressource existe mais ne prend pas en charge cette méthode. L'en-tête Allow liste les méthodes acceptées. RFC 9110
406 Not Acceptable
Le serveur ne peut produire aucune réponse qui satisfasse les en-têtes Accept, Accept-Language ou Accept-Encoding de la requête. RFC 9110
407 Proxy Authentication Required
Comme 401, mais le client doit s'authentifier auprès du proxy, comme le décrit l'en-tête Proxy-Authenticate. RFC 9110
408 Request Timeout
Le serveur n'a pas reçu la requête complète dans le délai qu'il était prêt à attendre, et il ferme la connexion. RFC 9110
409 Conflict
La requête entre en conflit avec l'état actuel de la ressource, par exemple une modification basée sur une version périmée ou le doublon d'une valeur unique. RFC 9110
410 Gone
La ressource se trouvait ici et a été supprimée définitivement. Contrairement à 404, ce code indique aux clients et aux moteurs de recherche qu'ils peuvent abandonner l'URL. RFC 9110
411 Length Required
Le serveur refuse la requête, car elle n'a pas d'en-tête Content-Length. RFC 9110
412 Precondition Failed
Une condition dans If-Match, If-Unmodified-Since ou un en-tête similaire était fausse, la requête n'a donc pas été appliquée. Cela évite d'écraser une modification faite par quelqu'un d'autre. RFC 9110
413 Content Too Large
Le corps de la requête dépasse la taille acceptée par le serveur, en général à cause d'une limite d'upload dans le serveur ou dans un proxy placé devant. Il s'appelait auparavant Payload Too Large. RFC 9110
414 URI Too Long
L'URL est plus longue que ce qu'accepte le serveur. Souvent, des données qui devraient être dans le corps d'un POST ont été mises dans la query string. RFC 9110
415 Unsupported Media Type
Le serveur n'accepte pas le format du corps de la requête, tel que déclaré dans l'en-tête Content-Type ou Content-Encoding. RFC 9110
416 Range Not Satisfiable
L'en-tête Range demande des octets situés hors de la ressource. RFC 9110
417 Expectation Failed
Le serveur ne peut pas satisfaire l'exigence indiquée dans l'en-tête Expect de la requête. RFC 9110
418 I'm a teapot
Un poisson d'avril tiré du Hyper Text Coffee Pot Control Protocol, où une théière refuse de faire du café. La RFC 9110 classe le numéro comme inutilisé et le garde réservé, car il a été trop souvent déployé en guise de plaisanterie pour qu'on puisse lui donner un autre sens. RFC 2324, RFC 9110
421 Misdirected Request
La requête est arrivée sur un serveur qui n'est pas configuré pour répondre à ce nom d'hôte. Cela peut arriver quand un navigateur réutilise une connexion HTTP/2 pour un autre hôte ; le client peut réessayer sur une nouvelle connexion. RFC 9110
422 Unprocessable Content
La syntaxe de la requête est correcte mais son contenu n'est pas valide, par exemple un corps JSON qui ne passe pas la validation. Ce code vient de WebDAV, où il s'appelait Unprocessable Entity. RFC 9110, RFC 4918
423 Locked
La ressource WebDAV est verrouillée, la méthode ne peut donc pas lui être appliquée. RFC 4918
424 Failed Dependency
La méthode n'a pas été exécutée sur cette ressource WebDAV, car une autre action dont elle dépendait a échoué. RFC 4918
425 Too Early
Le serveur ne traitera pas une requête arrivée dans les early data TLS, car il pourrait s'agir d'un rejeu. Le client doit la renvoyer une fois le handshake terminé. RFC 8470
426 Upgrade Required
Le serveur refuse la requête dans ce protocole et indique, dans l'en-tête Upgrade, le protocole vers lequel le client doit basculer. RFC 9110
428 Precondition Required
Le serveur exige que la requête soit conditionnelle, par exemple avec If-Match, pour qu'une mise à jour ne puisse pas écraser silencieusement une version plus récente. RFC 6585
429 Too Many Requests
Le client a envoyé trop de requêtes dans un laps de temps donné, ce qu'on appelle la limitation de débit (rate limiting). L'en-tête Retry-After peut indiquer combien de temps attendre. RFC 6585
431 Request Header Fields Too Large
Les en-têtes dans leur ensemble, ou l'un d'eux, dépassent la taille acceptée par le serveur. Un cookie trop gros en est une cause fréquente. RFC 6585
451 Unavailable For Legal Reasons
Le serveur refuse l'accès en raison d'une exigence légale, comme une décision de justice. Le numéro fait référence au roman Fahrenheit 451. RFC 7725

5xx Erreur du serveur

La requête est peut-être valide, mais le serveur, ou une passerelle placée devant lui, n'a pas pu la satisfaire.

500 Internal Server Error
Le serveur a rencontré une condition inattendue, souvent une exception non gérée. C'est dans les logs du serveur qu'il faut chercher la cause. RFC 9110
501 Not Implemented
Le serveur ne prend pas en charge la fonctionnalité dont la requête a besoin, par exemple une méthode qu'il ne reconnaît pas. RFC 9110
502 Bad Gateway
Une passerelle ou un proxy a reçu une réponse invalide du serveur situé derrière lui. Souvent, l'application derrière le proxy a planté ou n'écoute pas. RFC 9110
503 Service Unavailable
Le serveur ne peut pas traiter la requête pour le moment, à cause d'une surcharge ou d'une maintenance. L'en-tête Retry-After peut indiquer quand réessayer. RFC 9110
504 Gateway Timeout
Une passerelle ou un proxy n'a pas reçu à temps de réponse du serveur situé derrière lui. Souvent, l'application est trop lente ou injoignable. RFC 9110
505 HTTP Version Not Supported
Le serveur ne prend pas en charge la version majeure de HTTP utilisée par la requête. RFC 9110
506 Variant Also Negotiates
Le serveur est mal configuré : la variante choisie par la négociation de contenu transparente est elle-même configurée pour négocier, ce qui crée une boucle. RFC 2295
507 Insufficient Storage
Le serveur ne peut pas stocker ce dont il a besoin pour mener la requête à bien. Ce code est défini pour WebDAV. RFC 4918
508 Loop Detected
Le serveur a interrompu une opération WebDAV, car il a détecté une boucle infinie en suivant les liaisons (bindings). RFC 5842
510 Not Extended
La requête n'inclut pas une extension exigée par le serveur. La spécification qui définissait ce code a désormais le statut historique, et le registre de l'IANA marque le code comme obsolète. RFC 2774
511 Network Authentication Required
Le client doit s'authentifier pour accéder au réseau. C'est un portail captif qui l'envoie, comme la page de connexion du Wi-Fi d'un hôtel, et non le site demandé. RFC 6585

Codes non standard

Ces codes ne figurent pas dans le registre de l'IANA. Chacun est propre à un serveur ou à un service, et n'a de sens que là.

419 Page Expired Non standard
Laravel l'envoie quand le token CSRF d'un formulaire est absent ou a expiré. Laravel
444 No Response Non standard
Une configuration nginx peut renvoyer 444 pour fermer la connexion sans envoyer de réponse. Il apparaît dans le log de nginx, et le client ne reçoit rien. nginx
494 Request Header Too Large Non standard
nginx l'utilise en interne quand les en-têtes de la requête ne tiennent pas dans ses buffers. Le client reçoit une réponse 400. nginx
495 SSL Certificate Error Non standard
nginx l'utilise en interne quand la vérification d'un certificat client échoue. Sauf si la configuration le gère, le client reçoit une réponse 400. nginx
496 SSL Certificate Required Non standard
nginx l'utilise en interne quand le client n'a pas présenté le certificat exigé par le serveur. nginx
497 HTTP Request Sent to HTTPS Port Non standard
nginx l'utilise en interne quand une requête HTTP en clair arrive sur un port qui attend du HTTPS. nginx
499 Client Closed Request Non standard
nginx l'inscrit dans son log quand le client a fermé la connexion avant que le serveur ait répondu. Cela signifie souvent que le timeout du client est plus court que le temps de traitement de l'application. nginx
509 Bandwidth Limit Exceeded Non standard
Les panneaux de contrôle d'hébergement comme cPanel l'envoient quand un site a épuisé son quota de bande passante. cPanel
520 Web Server Returned an Unknown Error Non standard
Cloudflare l'envoie quand le serveur d'origine a renvoyé une réponse vide, inconnue ou inattendue. Cloudflare
521 Web Server Is Down Non standard
Cloudflare l'envoie quand le serveur d'origine a refusé la connexion de Cloudflare. Cloudflare
522 Connection Timed Out Non standard
Cloudflare l'envoie quand il n'a pas pu établir à temps une connexion TCP avec le serveur d'origine. Cloudflare
523 Origin Is Unreachable Non standard
Cloudflare l'envoie quand il n'a pas pu joindre le serveur d'origine, par exemple à cause d'un enregistrement DNS erroné ou d'un problème de routage. Cloudflare
524 A Timeout Occurred Non standard
Cloudflare s'est connecté au serveur d'origine, mais celui-ci n'a pas envoyé de réponse HTTP à temps. Cloudflare
525 SSL Handshake Failed Non standard
Cloudflare l'envoie quand le handshake TLS entre Cloudflare et le serveur d'origine a échoué. Cloudflare
526 Invalid SSL Certificate Non standard
Cloudflare l'envoie quand il n'a pas pu valider le certificat TLS du serveur d'origine. Cloudflare

S'exécute dans votre navigateur. Rien de ce que vous collez n'est envoyé.

À propos de cet outil

Comment les codes d'état sont organisés

Chaque réponse HTTP commence par un code d'état à trois chiffres. Le premier chiffre donne la classe : 1xx est une réponse provisoire, 2xx indique un succès, 3xx demande au client d'aller ailleurs, 4xx indique que l'erreur vient de la requête et 5xx qu'elle vient du serveur. Un client qui reçoit un code qu'il ne connaît pas doit le traiter comme le premier code de sa classe : un 4xx inconnu est donc traité comme un 400.

Le texte qui suit le numéro, comme Not Found, est le libellé (reason phrase). Ce n'est qu'une description destinée aux humains : les clients doivent l'ignorer, et HTTP/2 et HTTP/3 ne l'envoient pas du tout. Les noms des codes standard de cette liste sont ceux du registre de l'IANA, sauf pour 418, que le registre indique comme (Unused).

Les codes que l'on confond souvent

401 et 403. 401 signifie que le serveur ne sait pas qui vous êtes, et vous authentifier peut régler le problème. 403 signifie que le serveur refuse la requête et que vous authentifier de nouveau ne changera pas la réponse.

301, 302, 307 et 308. 301 et 308 sont permanents, 302 et 307 sont temporaires. Avec 301 et 302, un client peut transformer un POST en GET en suivant la redirection ; 307 et 308 imposent la même méthode et le même corps.

502 et 504. Les deux viennent d'un proxy ou d'un répartiteur de charge placé devant l'application. Avec 502, le proxy a reçu quelque chose d'invalide ou la connexion a échoué ; avec 504, il a attendu et n'a rien reçu à temps.

404 et 410. 404 dit qu'il n'y a rien ici, peut-être seulement pour l'instant. 410 dit que la ressource a été supprimée définitivement.

D'où vient cette liste

Les codes standard viennent de l'IANA HTTP Status Code Registry. La plupart sont définis dans la RFC 9110, HTTP Semantics, qui a remplacé la RFC 7231 en 2022. Les autres viennent de WebDAV et d'extensions plus modestes, et chaque entrée indique sa RFC. Les enregistrements temporaires qui ne sont encore que des Internet-Drafts sont laissés de côté. Le dernier groupe réunit des codes non enregistrés, mais que l'on croise dans les logs et les pages d'erreur de nginx, de Cloudflare et d'autres produits.

La liste complète fait partie de la page, elle se lit donc sans JavaScript. Le champ de recherche la filtre dans votre navigateur.

Questions

Quelle est la différence entre 401 et 403 ?

401 Unauthorized signifie que la requête ne contient pas d'identifiants valides, et le client peut réessayer après s'être authentifié. 403 Forbidden signifie que le serveur a compris la requête et la refuse : les identifiants éventuellement envoyés ne donnent pas accès, et les renvoyer n'y changera rien.

Pour une redirection permanente, faut-il utiliser 301 ou 308 ?

Les deux indiquent aux clients et aux moteurs de recherche que l'URL a changé définitivement. Avec 301, un client a le droit de transformer un POST en GET en suivant la redirection, alors que 308 impose la même méthode et le même corps. Pour des URL de pages ordinaires demandées en GET, les deux se comportent de la même façon.

Quelle est la différence entre 502 et 504 ?

Les deux sont envoyés par un proxy, une passerelle ou un répartiteur de charge, pas par l'application. 502 Bad Gateway signifie que le serveur situé derrière a renvoyé une réponse invalide ou refusé la connexion. 504 Gateway Timeout signifie qu'il n'a pas répondu dans le délai fixé par le proxy.

499 est-il un vrai code d'état HTTP ?

Il n'est pas enregistré auprès de l'IANA. nginx écrit 499 dans son log d'accès quand le client a fermé la connexion avant l'envoi de la réponse : aucun client ne le reçoit donc jamais. D'autres produits utilisent de la même façon des numéros hors du registre, comme les codes 520 à 526 de Cloudflare.

Autres outils de la catégorie Réseau