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