Codes de réponse HTTP
=====================

Les codes de statut de réponse HTTP indiquent si une requête HTTP a été exécutée avec succès ou non. Les réponses sont regroupées en cinq classes :

1. Les réponses informatives (`100` - `199`),
2. Les réponses de succès (`200` - `299`),
3. Les messages de redirection (`300` - `399`),
4. Les erreurs du client (`400` - `499`),
5. Les erreurs du serveur (`500` - `599`).
Réponses informatives
---------------------

`100 Continue`

Cette réponse intermédiaire indique que tout est OK pour le moment et que le client peut continuer sa requête ou l'ignorer si celle-ci est déjà finie.

`101 Switching Protocols`

Ce code est envoyé en réponse à un en-tête de requête `Upgrade` de la part du client et indique le protocole sur lequel passe le serveur.

`102 Processing` (en-US) (WebDAV)

Ce code indique que le serveur a reçu et est en train de traiter la requête mais qu'une réponse n'est pas encore disponible.

`103 Early Hints`

Ce code de statut est conçu pour être utilisé avec l'en-tête `Link`, ce qui permet à l'agent utilisateur de commencer le préchargement des ressources tandis que le serveur prépare une réponse.

Réponses de succès
------------------

`200 OK`

La requête a réussi. La signification du succès peut varier selon la méthode HTTP :

* `GET` : La ressource a été récupérée et est retransmise dans le corps du message.
* `HEAD` : Les en-têtes d'entité sont présents dans la réponse et il n'y a pas de corps.
* `PUT` ou `POST` : La ressource décrivant le résultat de l'action est transmise dans le corps du message.
* `TRACE` : Le corps du message contient le message de requête tel que reçu par le serveur.

`201 Created`

La requête a réussi et une nouvelle ressource a été créée en guise de résultat. Il s'agit typiquement de la réponse envoyée après une requête `PUT` ou `POST`.

`202 Accepted`

La requête a été reçue mais n'a pas encore été traitée. C'est une réponse évasive, ce qui signifie qu'il n'y a aucun moyen en HTTP d'envoyer une réponse asynchrone ultérieure indiquant le résultat issu du traitement de la requête. Elle est destinée aux cas où un autre processus ou serveur gère la requête, et peut être utile pour faire du traitement par lots.

`203 Non-Authoritative Information`

Ce code de réponse signifie que l'ensemble de méta-informations renvoyé n'est pas exactement l'ensemble disponible sur le serveur d'origine, mais plutôt un ensemble collecté à partir d'une copie locale ou tierce. Ce code est utilisé la plupart du temps par les serveurs miroirs ou de sauvegarde d'une autre ressource. À l'exception de cette condition, une réponse `200 OK` est préférable.

`204 No Content`

Il n'y a pas de contenu à envoyer pour cette requête, mais les en-têtes peuvent être utiles. L'agent utilisateur peut mettre à jour ses en-têtes en cache pour cette ressource en les remplaçant par les nouveaux.

`205 Reset Content`

Indique à l'agent utilisateur de réinitialiser le document qui a envoyé cette requête.

`206 Partial Content`

Ce code de réponse est utilisé en réaction à l'en-tête `Range` (en-US) envoyé par le client pour séparer le téléchargement en plusieurs flux.

`207 Multi-Status` (en-US) (WebDAV)

Une réponse multi-statut donne des informations sur des ressources multiples dans les situations où les codes de statut multiples sont appropriés.

`208 Already Reported` (en-US) (WebDAV)

Utilisé au sein d'un élément de réponse DAV `<dav:propstat>` pour éviter d'énumérer à maintes reprises les membres internes de bindings multiples vers la même collection.

`226 IM Used` (en-US) (HTTP Delta encoding)

Le serveur a exécuté une requête `GET` pour la ressource, et la réponse est une représentation du résultat d'une ou plusieurs manipulations d'instance appliquées à l'instance courante.

Messages de redirection
-----------------------

`300 Multiple Choices`

La requête a plusieurs réponses possibles. L'agent utilisateur ou l'utilisateur doit choisir l'une d'entre elles. Il n'y a pas de manière standard pour choisir l'une de ces réponses mais des liens HTML vers les choix sont recommandés afin de permettre à l'utilisateur de choisir.

`301 Moved Permanently`

Ce code de réponse signifie que l'URL de la ressource demandée a été modifiée. Une nouvelle URL est donnée dans la réponse.

`302 Found`

Ce code de réponse indique que l'URI de la ressource demandée a été modifiée *temporairement*. De nouveaux changements dans l'URI pourront être effectués ultérieurement. Par conséquent, cette même URI devrait être utilisée par le client pour les requêtes futures.

`303 See Other`

Le serveur a envoyé cette réponse pour diriger le client vers la ressource demandée via un autre URI en utilisant une requête `GET`.

`304 Not Modified`

Ce code est utilisé pour des raisons de cache. Il indique au client que la réponse n'a pas été modifiée. De fait, le client peut continuer à utiliser la même version de la réponse, mise en cache.

`305 Use Proxy` 
Obsolète

A été défini dans une version antérieure de la spécification HTTP pour indiquer qu'une réponse sollicitée doit transiter par un proxy. Ce code est aujourd'hui périmé pour des raisons de sécurité relatives à la configuration d'un proxy.

`306 unused`

Ce code de réponse n'est plus en service, son usage est actuellement réservé. Il était utilisé dans une version précédente de la spécification HTTP/1.1.

`307 Temporary Redirect`

Le serveur a envoyé cette réponse pour rediriger le client afin d'obtenir la ressource demandée via un autre URI, en utilisant la même méthode que précédemment. Ce code a la même sémantique que le code `302 Found`, à l'exception près que l'agent utilisateur *ne doit pas* changer la méthode HTTP utilisée : si `POST` était utilisé dans la première requête, alors `POST` doit être utilisé dans la seconde.

`308 Permanent Redirect`

Cela signifie que la ressource a été déplacée de manière permanente vers une autre URI, spécifiée dans l'en-tête de réponse HTTP `Location:`. Ce code a la même sémantique que le code `301 Moved Permanently`, à l'exception près que l'agent utilisateur *ne doit pas* changer la méthode HTTP utilisée : si `POST` était utilisé dans la première requête, alors `POST` doit être utilisé dans la seconde.

Réponses d'erreur côté client
-----------------------------

`400 Bad Request`

Cette réponse indique que le serveur n'a pas pu comprendre la requête à cause d'une syntaxe invalide.

`401 Unauthorized`

Bien que le standard HTTP indique « non-autorisé », la sémantique de cette réponse correspond à « non-authentifié » : le client doit s'authentifier afin d'obtenir la réponse demandée.

`402 Payment Required` 
Expérimental

Ce code de réponse est réservé à une utilisation future. Le but initial justifiant la création de ce code était l'utilisation de systèmes de paiement numérique. Cependant, il n'est pas utilisé actuellement et aucune convention standard n'existe à ce sujet.

`403 Forbidden`

Le client n'a pas les droits d'accès au contenu, donc le serveur refuse de donner la véritable réponse.

`404 Not Found`

Le serveur n'a pas trouvé la ressource demandée. Ce code de réponse est principalement connu pour son apparition fréquente sur le web.

`405 Method Not Allowed`

La méthode de la requête est connue du serveur mais n'est pas prise en charge pour la ressource cible. Par exemple, une API peut ne pas autoriser l'utilisation du verbe `DELETE` pour supprimer une ressource.

`406 Not Acceptable`

Cette réponse est envoyée quand le serveur web, après une négociation de contenu géré par le serveur, ne trouve rien qui satisfasse les critères donnés par l'agent utilisateur.

`407 Proxy Authentication Required`

Similaire au code `401`, sauf que l'authentification doit être effectuée au travers d'un proxy.

`408 Request Timeout`

Cette réponse est envoyée via une connexion en attente par certains serveurs, même sans qu'il y ait de requête préalable de la part du client. Cela signifie que le serveur aimerait fermer cette connexion inutilisée. Cette réponse est bien plus utilisée depuis que certains navigateurs, comme Chrome, Firefox 27+ ou IE9, utilisent des mécanismes de préconnexion HTTP pour accélérer la navigation. Notez aussi que certains serveurs ferment simplement la connexion sans même envoyer ce message.

`409 Conflict`

Cette réponse est envoyée quand une requête entre en conflit avec l'état actuel du serveur.

`410 Gone`

Cette réponse est envoyée lorsque le contenu demandé a été supprimé de façon permanente du serveur, sans nouvelle adresse. Les clients doivent vider les caches et liens associés à cette ressource. La spécification HTTP a conçu ce code de statut pour qu'il soit utilisé pour des « services promotionnels limités dans le temps ». Les API ne devraient pas se sentir obligées d'indiquer que des ressources ont été supprimées avec ce code de statut.

`411 Length Required`

Le serveur a rejeté la requête, car le champ d'en-tête `Content-Length` n'est pas défini et le serveur l'impose.

`412 Precondition Failed`

Le client a indiqué des préconditions dans ses en-têtes que le serveur ne remplit pas.

`413 Payload Too Large`

L'entité demandée est plus grosse que la limite définie par le serveur. Le serveur peut fermer la connexion ou retourner un champ d'en-tête `Retry-After`.

`414 URI Too Long`

L'URI interrogé par le client est plus long que ce que le serveur est en mesure d'interpréter.

`415 Unsupported Media Type`

Le format média des données demandées n'est pas supporté par le serveur, donc le serveur rejette la requête.

`416 Range Not Satisfiable`

La plage spécifiée par le champ d'en-tête `Range` de la requête ne peut pas être satisfaite ; il est possible que la plage excède la taille des données provenant de l'URI ciblé.

`417 Expectation Failed`

Ce code de réponse signifie que les attentes indiquées par le champ d'en-tête de requête `Expect` n'ont pas pu être satisfaites par le serveur.

`418 I'm a teapot`

Le serveur refuse de brasser du café avec une théière.

`421 Misdirected Request` (en-US)

La requête a été envoyée à un serveur incapable de produire une réponse. Ce code peut être envoyé par un serveur qui n'a pas été configuré pour produire des réponses sujettes à la combinaison de schémas et d'identités incluse dans l'URI de la requête.

`422 Unprocessable Entity` (WebDAV)

La requête a bien été constituée mais n'a pas pu être traitée à cause d'erreurs sémantiques.

`423 Locked` (en-US) (WebDAV)

La ressource qui est en train d'être consultée est verrouillée.

`424 Failed Dependency` (en-US) (WebDAV)

La requête a échoué à cause de l'échec d'une requête précédente.

`425 Too Early` 
Expérimental

Indiquer que le serveur ne souhaite pas traiter une requête qui pourrait être rejouée.

`426 Upgrade Required`

Le serveur refuse de traiter la requête en utilisant le protocole actuel mais peut accepter de le faire si le client opte pour un autre protocole. Le serveur *doit* envoyer un en-tête `Upgrade` dans la réponse 426 pour indiquer le(s) protocole(s) demandé(s) (Section 6.7 de [RFC7230]).

`428 Precondition Required`

Le serveur d'origine impose que la requête soit conditionnelle. Ceci est prévu pour empêcher le problème de 'perte de mise à jour', où un client récupère l'état d'une ressource avec `GET`, le modifie, et le renvoie au serveur avec `PUT` pendant qu'un tiers modifie l'état du serveur, ce qui conduit à un conflit.

`429 Too Many Requests`

L'utilisateur a émis trop de requêtes dans un laps de temps donné.

`431 Request Header Fields Too Large`

Le serveur n'est pas disposé à traiter la requête, car les champs d'en-tête sont trop longs. La requête peut être renvoyée après avoir réduit la taille des en-têtes.

`451 Unavailable For Legal Reasons`

L'utilisateur tente d'accéder à une ressource illégale, telle qu'une page censurée par un gouvernement.

Réponses d'erreur côté serveur
------------------------------

`500 Internal Server Error`

Le serveur a rencontré une situation qu'il ne sait pas traiter.

`501 Not Implemented`

La méthode de requête n'est pas supportée par le serveur et ne peut pas être traitée. Les seules méthodes que les serveurs sont tenus de prendre en charge (et donc pour lesquelles ils ne peuvent pas renvoyer ce code) sont `GET` et `HEAD`.

`502 Bad Gateway`

Cette réponse d'erreur signifie que le serveur, alors qu'il fonctionnait en tant que passerelle pour recevoir une réponse nécessaire pour traiter la requête, a reçu une réponse invalide.

`503 Service Unavailable`

Le serveur n'est pas prêt pour traiter la requête. Les causes les plus communes sont que le serveur est éteint pour maintenance ou qu'il est surchargé. Notez qu'avec cette réponse, une page ergonomique peut expliquer le problème. Ces réponses doivent être utilisées temporairement et le champ d'en-tête `Retry-After` doit, dans la mesure du possible, contenir une estimation de l'heure de reprise du service. Le webmestre doit aussi faire attention aux en-têtes de mise en cache qui sont envoyés avec cette réponse (qui ne doivent typiquement pas être mis en cache).

`504 Gateway Timeout`

Cette réponse d'erreur est renvoyée lorsque le serveur sert de passerelle et ne peut pas donner de réponse dans les temps.

`505 HTTP Version Not Supported`

La version de HTTP utilisée dans la requête n'est pas prise en charge par le serveur.

`506 Variant Also Negotiates`

Le serveur a une erreur de configuration interne : la négociation de contenu transparente pour la requête aboutit à une dépendance circulaire.

`507 Insufficient Storage` (WebDAV)

Le serveur a une erreur de configuration interne : la ressource sélectionnée est configurée pour participer elle-même à une négociation de contenu transparente, et n'est par conséquent pas un nœud terminal valable dans le processus de négociation.

`508 Loop Detected` (WebDAV)

Le serveur a détecté une boucle infinie en traitant la requête.

`510 Not Extended`

Des extensions supplémentaires sont requises afin que le serveur puisse satisfaire la requête.

`511 Network Authentication Required`

Le code de statut 511 indique que le client doit s'authentifier afin de pouvoir accéder au réseau.

Compatibilité des navigateurs
-----------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Voir aussi
----------

* Liste des codes de statut HTTP sur Wikipédia
* Registre officiel des codes de statut HTTP par l'IANA