Codes de statut HTTP — liste complète avec significations et exemples

Tous les codes de statut HTTP officiels de 100 à 511, plus les codes nginx, Cloudflare et AWS, avec le moment où utiliser chacun.

91 codes

1xx Information

100Continue

Réponse intermédiaire : le serveur a reçu les en-têtes de la requête et le client peut envoyer le corps.

Quand l’utiliser

Envoyé automatiquement par les serveurs lorsqu’un client inclut « Expect: 100-continue » avant d’envoyer un corps volumineux, afin que le client ne gaspille pas de bande passante pour une requête qui serait rejetée.

Quand l’éviter

Ne l’envoyez pas depuis le code applicatif comme statut final ; ce n’est jamais la réponse à une requête, seulement une étape avant la vraie réponse.

Mise en cache

Sans objet

Défini dans

RFC 9110 §15.2.1

Exemple
PUT /upload HTTP/1.1
Content-Length: 104857600
Expect: 100-continue

HTTP/1.1 100 Continue
101Switching Protocols

Le serveur accepte de basculer la connexion vers le protocole indiqué dans l’en-tête Upgrade.

Quand l’utiliser

La réponse de handshake des connexions WebSocket (Upgrade: websocket) et, historiquement, des mises à niveau HTTP/1.1 vers h2c.

Quand l’éviter

HTTP/2 et HTTP/3 ne l’utilisent pas ; les WebSockets sur HTTP/2 utilisent plutôt la méthode CONNECT étendue (RFC 8441).

Mise en cache

Sans objet

Défini dans

RFC 9110 §15.2.2

Exemple
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
102ProcessingObsolète

Réponse intermédiaire indiquant au client que le serveur travaille encore sur une longue requête WebDAV, pour éviter qu’il n’abandonne par expiration.

WebDAV. Retiré de WebDAV dans la RFC 4918, mais toujours présent dans le registre IANA.

Quand l’utiliser

Uniquement sur d’anciens serveurs WebDAV traitant des opérations récursives lentes, comme un COPY ou un MOVE en profondeur.

Quand l’éviter

Les nouvelles API devraient plutôt renvoyer 202 Accepted avec une URL de suivi pour les traitements longs.

Mise en cache

Sans objet

Défini dans

RFC 2518 §10.1

Exemple
HTTP/1.1 102 Processing
103Early Hints

Réponse intermédiaire contenant des en-têtes Link pour que le navigateur commence le préchargement ou la préconnexion pendant que le serveur prépare la réponse finale.

Quand l’utiliser

Quand le HTML met du temps à être généré (rendu côté serveur, requêtes en base de données) et que vous savez de quels CSS, polices ou origines la page a besoin. Les navigateurs Chromium et Firefox tiennent compte des indications preload et preconnect dans les réponses 103 ; Safari tient compte de preconnect.

Quand l’éviter

N’y placez pas d’en-têtes qui ne doivent s’appliquer qu’à la réponse finale, comme Set-Cookie ; les navigateurs ignorent la plupart des en-têtes d’une 103.

Mise en cache

Sans objet

Défini dans

RFC 8297

Exemple
HTTP/1.1 103 Early Hints
Link: </style.css>; rel=preload; as=style
Link: <https://cdn.example.com>; rel=preconnect

HTTP/1.1 200 OK
Content-Type: text/html
104Upload Resumption Supported

Réponse intermédiaire indiquant au client que l’envoi qu’il a commencé pourra être repris plus tard, et où.

Enregistrement IANA temporaire pour le brouillon IETF sur les envois reprenables ; pas encore une RFC définitive.

Quand l’utiliser

Expérimental : les serveurs qui implémentent le brouillon sur les envois reprenables l’envoient avec un en-tête Location pointant vers la ressource d’envoi.

Quand l’éviter

Pas d’usage général tant que le brouillon n’est pas publié en RFC ; la plupart des clients et proxys ne le connaissent pas.

Mise en cache

Sans objet

Défini dans

draft-ietf-httpbis-resumable-upload

Exemple
HTTP/1.1 104 Upload Resumption Supported
Upload-Draft-Interop-Version: 6
Location: https://example.com/upload/b530ce8ff

2xx Succès

200OKMis en cache par défaut

La requête a réussi. Le contenu du corps dépend de la méthode : la ressource pour GET, le résultat de l’action pour POST.

Quand l’utiliser

La réponse de succès normale pour GET, et pour POST, PUT, PATCH ou DELETE lorsque vous renvoyez un corps décrivant le résultat.

Quand l’éviter

Ne renvoyez pas 200 avec un message d’erreur dans le corps (« soft errors »). Les clients, la supervision, les caches et les moteurs de recherche lisent le code d’état, pas votre JSON.

Mise en cache

Mis en cache par défaut (cache heuristique possible)

Défini dans

RFC 9110 §15.3.1

Exemple
HTTP/1.1 200 OK
Content-Type: application/json

{"id": 42, "name": "Ada"}
201Created

La requête a réussi et a créé une ou plusieurs nouvelles ressources.

Quand l’utiliser

Après un POST (ou un PUT vers une nouvelle URL) qui crée quelque chose. Incluez un en-tête Location pointant vers la nouvelle ressource ; le corps la décrit généralement.

Quand l’éviter

Ne l’utilisez pas si rien de nouveau n’a été créé, par exemple pour la mise à jour d’un enregistrement existant (utilisez 200 ou 204).

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.3.2

Exemple
HTTP/1.1 201 Created
Location: /users/42
Content-Type: application/json

{"id": 42}
202Accepted

La requête a été acceptée pour traitement, mais le traitement n’est pas terminé et peut encore échouer.

Quand l’utiliser

Travaux en file d’attente ou asynchrones : encodage vidéo, génération de rapports, imports en masse. Renvoyez un lien où le client peut suivre l’état de la tâche.

Quand l’éviter

Ne l’utilisez pas pour signifier « succès » pour un traitement synchrone ; il ne promet explicitement rien quant au résultat.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.3.3

Exemple
HTTP/1.1 202 Accepted
Location: /jobs/7f3a
Content-Type: application/json

{"status": "queued"}
203Non-Authoritative InformationMis en cache par défaut

Succès, mais un proxy de transformation a modifié la réponse 200 du serveur d’origine.

Quand l’utiliser

Uniquement par des intermédiaires qui modifient le contenu, comme un proxy qui compresse les images ou réécrit le HTML, pour indiquer au client qu’il ne s’agit pas de la réponse exacte de l’origine.

Quand l’éviter

Les serveurs d’origine et les API ne devraient pas l’envoyer.

Mise en cache

Mis en cache par défaut (cache heuristique possible)

Défini dans

RFC 9110 §15.3.4

Exemple
HTTP/1.1 203 Non-Authoritative Information
Content-Type: image/webp
204No ContentMis en cache par défaut

Succès, et il n’y a volontairement aucun corps.

Quand l’utiliser

DELETE réussi, PUT ou PATCH quand vous ne renvoyez pas la ressource mise à jour, enregistrement automatique d’un formulaire, ou réponse à une requête CORS preflight.

Quand l’éviter

N’incluez jamais de corps ; les clients ne le liront pas, et en HTTP/1.1 un corps parasite corrompt la réponse suivante sur la connexion. Utilisez 200 si vous avez quelque chose à renvoyer.

Mise en cache

Mis en cache par défaut (cache heuristique possible)

Défini dans

RFC 9110 §15.3.5

Exemple
HTTP/1.1 204 No Content
205Reset Content

Succès ; le client doit réinitialiser la vue du document, par exemple vider le formulaire qui a été soumis.

Quand l’utiliser

Interfaces de saisie où l’utilisateur soumet un formulaire et saisit aussitôt un autre enregistrement.

Quand l’éviter

Les navigateurs n’implémentent pas la réinitialisation : en pratique, il se comporte comme 204. Ne doit pas contenir de corps.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.3.6

Exemple
HTTP/1.1 205 Reset Content
206Partial ContentMis en cache par défaut

Le serveur ne renvoie que la ou les plages d’octets demandées par le client avec un en-tête Range.

Quand l’utiliser

Déplacement dans une vidéo ou un audio, téléchargements reprenables et gestionnaires de téléchargement qui récupèrent un fichier en morceaux parallèles. Incluez Content-Range.

Quand l’éviter

Ne l’envoyez que si la requête contenait un en-tête Range que vous respectez. Si vous ignorez Range, envoyez 200 avec le corps complet.

Mise en cache

Mis en cache par défaut (cache heuristique possible)

Défini dans

RFC 9110 §15.3.7

Exemple
GET /video.mp4 HTTP/1.1
Range: bytes=0-1023

HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1023/146515
Content-Length: 1024
207Multi-Status

Le corps (XML) contient un statut distinct pour chacune de plusieurs ressources.

WebDAV

Quand l’utiliser

Opérations WebDAV comme PROPFIND qui portent sur de nombreuses ressources. Certaines API JSON l’empruntent pour des points de terminaison par lot.

Quand l’éviter

Pour les API par lot, beaucoup d’équipes préfèrent 200 avec des résultats par élément, car les clients génériques traitent 207 comme un simple succès.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 4918 §11.1

Exemple
HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
208Already Reported

Utilisé dans une réponse 207 pour indiquer qu’une ressource a déjà été listée plus haut et n’est donc pas répétée (évite les boucles avec les bindings).

WebDAV

Quand l’utiliser

Serveurs WebDAV qui prennent en charge les bindings (RFC 5842).

Quand l’éviter

N’a pas de sens comme réponse de premier niveau en dehors de WebDAV.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 5842 §7.1

Exemple
<D:status>HTTP/1.1 208 Already Reported</D:status>
226IM Used

Le serveur a répondu à un GET avec un delta (instance manipulation) appliqué à la ressource actuelle plutôt qu’avec la ressource complète.

Quand l’utiliser

Encodage delta pour HTTP (en-têtes A-IM / IM). Rarement déployé.

Quand l’éviter

Non pris en charge par les navigateurs ; ne l’utilisez pas dans des API ordinaires.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 3229 §10.4.1

Exemple
HTTP/1.1 226 IM Used
IM: vcdiff
ETag: "v2"

3xx Redirection

300Multiple ChoicesMis en cache par défaut

La ressource a plusieurs représentations et le client (ou l’utilisateur) doit en choisir une.

Quand l’utiliser

Rare : négociation de contenu pilotée par l’agent, par exemple pour proposer un document en plusieurs langues ou formats avec un lien vers chacun.

Quand l’éviter

Les navigateurs ne choisissent pas automatiquement. Pour le choix de langue ou de format, une négociation côté serveur ou une page normale avec des liens fonctionne mieux.

Mise en cache

Mis en cache par défaut (cache heuristique possible)

Défini dans

RFC 9110 §15.4.1

Exemple
HTTP/1.1 300 Multiple Choices
Link: </doc.en.html>; rel=alternate; hreflang=en
Link: </doc.fr.html>; rel=alternate; hreflang=fr
301Moved PermanentlyMis en cache par défaut

La ressource a une nouvelle URL permanente, indiquée dans l’en-tête Location.

Quand l’utiliser

Changement de domaine, passage de HTTP à HTTPS, slugs modifiés, regroupement d’URL en double. Les moteurs de recherche transfèrent les signaux de classement vers la nouvelle URL.

Quand l’éviter

Les navigateurs peuvent transformer un POST en GET en suivant une 301. Si la méthode doit être conservée (point de terminaison d’API déplacé), utilisez 308. Les navigateurs mettent les 301 en cache de façon agressive : testez avant de déployer.

Mise en cache

Mis en cache par défaut (cache heuristique possible)

Défini dans

RFC 9110 §15.4.2

Exemple
HTTP/1.1 301 Moved Permanently
Location: https://www.example.com/new-page
302Found

La ressource se trouve temporairement à une autre URL ; continuez à utiliser l’URL d’origine à l’avenir.

Quand l’utiliser

Redirections temporaires : redirections de connexion, tests A/B, pages de maintenance, redirections géographiques ou linguistiques.

Quand l’éviter

Les navigateurs transforment un POST en GET en suivant une 302 (comportement historique que la RFC autorise). Utilisez 303 pour « allez voir le résultat » après un POST, et 307 quand la méthode doit être préservée.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.4.3

Exemple
HTTP/1.1 302 Found
Location: /login?next=%2Faccount
303See Other

Redirige le client vers une autre URL, qu’il doit récupérer avec GET.

Quand l’utiliser

Le modèle Post/Redirect/Get : après le POST d’un formulaire, envoyez 303 vers la page de résultat pour qu’un rafraîchissement ne soumette pas à nouveau le formulaire.

Quand l’éviter

Pas pour un contenu déplacé ; il n’indique rien sur un éventuel déplacement de l’URL d’origine.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.4.4

Exemple
HTTP/1.1 303 See Other
Location: /orders/1234
304Not Modified

Réponse à un GET ou HEAD conditionnel (If-None-Match ou If-Modified-Since) : la copie en cache du client est toujours valide.

Revalidation du cache : non stocké lui-même, mais il rafraîchit la réponse en cache que le client possède déjà.

Quand l’utiliser

Automatiquement par les serveurs et CDN quand l’ETag ou la date Last-Modified correspond, ce qui évite de transférer un corps inchangé.

Quand l’éviter

N’envoyez jamais de corps. Ne l’envoyez pas en réponse à une requête non conditionnelle ; le client n’a rien à réutiliser.

Mise en cache

Sans objet

Défini dans

RFC 9110 §15.4.5

Exemple
GET /app.js HTTP/1.1
If-None-Match: "33a64df5"

HTTP/1.1 304 Not Modified
ETag: "33a64df5"
Cache-Control: max-age=3600
305Use ProxyObsolète

Obsolète. Indiquait autrefois au client de répéter la requête via un proxy indiqué dans Location.

Quand l’utiliser

Rien. Il a été déprécié pour des raisons de sécurité et les navigateurs l’ignorent.

Quand l’éviter

Ne l’envoyez pas.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.4.6

Exemple
HTTP/1.1 305 Use Proxy
306(Unused)Obsolète

Réservé. Il a été utilisé dans un brouillon pour « Switch Proxy » et n’est plus utilisé.

Quand l’utiliser

Rien.

Quand l’éviter

Ne l’envoyez pas.

Mise en cache

Sans objet

Défini dans

RFC 9110 §15.4.7

307Temporary Redirect

Redirection temporaire où le client doit répéter la requête avec la même méthode et le même corps.

Quand l’utiliser

Redirection temporaire de requêtes POST, PUT ou DELETE (point de terminaison d’API déplacé pour maintenance). Les navigateurs affichent aussi une 307 interne quand HSTS impose HTTPS.

Quand l’éviter

Pour un déplacement permanent, utilisez 308. Pour « allez chercher le résultat avec GET », utilisez 303.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.4.8

Exemple
HTTP/1.1 307 Temporary Redirect
Location: https://api2.example.com/v1/orders
308Permanent RedirectMis en cache par défaut

Redirection permanente où le client doit répéter la requête avec la même méthode et le même corps.

Quand l’utiliser

Un point de terminaison d’API déplacé définitivement qui reçoit des POST ou PUT. Les moteurs de recherche le traitent comme une 301. Next.js et Vercel utilisent 308 par défaut pour les redirections permanentes.

Quand l’éviter

Les très anciens clients (Internet Explorer sous Windows 7 et versions antérieures) ne le comprennent pas ; pour un simple déplacement de page, la 301 convient tout aussi bien.

Mise en cache

Mis en cache par défaut (cache heuristique possible)

Défini dans

RFC 9110 §15.4.9

Exemple
HTTP/1.1 308 Permanent Redirect
Location: https://example.com/api/v2/upload

4xx Erreur client

400Bad Request

Le serveur ne traitera pas la requête en raison d’une erreur du client : syntaxe incorrecte, cadrage invalide ou paramètres invalides.

Quand l’utiliser

JSON impossible à analyser, paramètre obligatoire manquant, valeur du mauvais type. Expliquez le problème dans le corps (le format problem+json de la RFC 9457 est un bon choix).

Quand l’éviter

Pour une entrée bien formée qui enfreint des règles métier, beaucoup d’API utilisent 422. Pour les problèmes d’authentification, utilisez 401 ou 403.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.1

Exemple
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json

{"title": "Invalid JSON", "detail": "Unexpected token } at position 41"}
401Unauthorized

La requête ne contient pas d’identifiants d’authentification valides. Malgré son nom, il signifie « non authentifié ».

Quand l’utiliser

Pas de jeton, jeton expiré ou mauvais mot de passe. La réponse doit inclure un en-tête WWW-Authenticate décrivant comment s’authentifier.

Quand l’éviter

Si l’utilisateur est connecté mais n’a pas l’autorisation, utilisez 403. N’envoyez pas de 401 sans WWW-Authenticate.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.2

Exemple
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="api", error="invalid_token"
402Payment Required

Réservé à un usage futur. Il n’a pas de sémantique standard.

Quand l’utiliser

Certaines API l’utilisent pour « quota épuisé, passez à une offre supérieure » ou pour un paiement échoué (Stripe renvoie 402 pour les cartes refusées).

Quand l’éviter

Ne comptez pas sur la compréhension des clients ; décrivez le problème dans le corps.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.3

Exemple
HTTP/1.1 402 Payment Required
Content-Type: application/json

{"error": "card_declined"}
403Forbidden

Le serveur a compris la requête et sait qui vous êtes (ou ne s’en soucie pas), mais refuse d’y donner suite.

Quand l’utiliser

L’utilisateur authentifié n’a pas l’autorisation, une IP est bloquée, le listage de répertoires est désactivé, ou une règle de WAF s’est déclenchée. Se réauthentifier n’y changera rien.

Quand l’éviter

Si les identifiants sont absents ou invalides, utilisez 401. Si révéler l’existence de la ressource constitue en soi une fuite, renvoyez plutôt 404.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.4

Exemple
HTTP/1.1 403 Forbidden
Content-Type: application/json

{"error": "You do not have access to this project"}
404Not FoundMis en cache par défaut

Le serveur n’a pas de représentation actuelle pour l’URL, ou refuse de dire s’il en existe une.

Quand l’utiliser

URL inconnues, enregistrements supprimés quand vous ne suivez pas les suppressions, ou ressources masquées aux utilisateurs non autorisés.

Quand l’éviter

Si la ressource a existé et a disparu définitivement, 410 l’indique explicitement. Ne renvoyez pas une page 200 qui dit « introuvable » (soft 404).

Mise en cache

Mis en cache par défaut (cache heuristique possible)

Défini dans

RFC 9110 §15.5.5

Exemple
HTTP/1.1 404 Not Found
Content-Type: text/html
405Method Not AllowedMis en cache par défaut

L’URL existe, mais ne prend pas en charge cette méthode HTTP.

Quand l’utiliser

Un DELETE sur une ressource en lecture seule ou un POST sur une page acceptant uniquement GET. La réponse doit inclure un en-tête Allow listant les méthodes prises en charge.

Quand l’éviter

Ne l’utilisez pas pour des problèmes d’autorisation (403) ni pour des méthodes que le serveur n’implémente pas du tout (501).

Mise en cache

Mis en cache par défaut (cache heuristique possible)

Défini dans

RFC 9110 §15.5.6

Exemple
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD
406Not Acceptable

Le serveur ne peut pas produire de réponse correspondant aux en-têtes Accept, Accept-Language ou Accept-Encoding de la requête.

Quand l’utiliser

Une API qui ne parle que JSON et reçoit « Accept: application/xml » sans solution de repli.

Quand l’éviter

La plupart des serveurs ignorent les en-têtes Accept sans correspondance et envoient leur format par défaut, ce qui est généralement plus convivial.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.7

Exemple
HTTP/1.1 406 Not Acceptable
Content-Type: application/json

{"supported": ["application/json"]}
407Proxy Authentication Required

Comme 401, mais le client doit s’authentifier auprès du proxy intermédiaire.

Quand l’utiliser

Envoyé par les proxys sortants (proxys d’entreprise), avec un en-tête Proxy-Authenticate.

Quand l’éviter

Les serveurs d’origine ne devraient jamais l’envoyer.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.8

Exemple
HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: Basic realm="corp-proxy"
408Request Timeout

Le serveur n’a pas reçu de requête complète dans le délai qu’il était prêt à attendre, et ferme la connexion.

Quand l’utiliser

Envoyé par les serveurs sur les connexions keep-alive inactives ou les envois lents. Les clients peuvent renvoyer la requête sur une nouvelle connexion.

Quand l’éviter

Pas pour un traitement back-end lent ; c’est une 504 au niveau d’une passerelle ou simplement une réponse lente. Envoyez « Connection: close » avec.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.9

Exemple
HTTP/1.1 408 Request Timeout
Connection: close
409Conflict

La requête entre en conflit avec l’état actuel de la ressource.

Quand l’utiliser

Créer un utilisateur dont l’e-mail existe déjà, modifier un enregistrement que quelqu’un d’autre a changé (version différente), supprimer un dossier non vide.

Quand l’éviter

Pour l’échec de conditions If-Match / If-Unmodified-Since, utilisez 412. Pour les erreurs de validation, utilisez 400 ou 422.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.10

Exemple
HTTP/1.1 409 Conflict
Content-Type: application/json

{"error": "Email already registered"}
410GoneMis en cache par défaut

La ressource existait ici, a définitivement disparu et n’a pas d’adresse de renvoi.

Quand l’utiliser

Produits arrêtés, promotions expirées, comptes supprimés, versions d’API retirées. Google traite 404 et 410 presque de la même façon, même si une 410 peut sortir de l’index un peu plus tôt.

Quand l’éviter

Si le contenu a été déplacé, redirigez plutôt avec une 301. Si vous n’êtes pas sûr que ce soit définitif, utilisez 404.

Mise en cache

Mis en cache par défaut (cache heuristique possible)

Défini dans

RFC 9110 §15.5.11

Exemple
HTTP/1.1 410 Gone
411Length Required

Le serveur exige un en-tête Content-Length pour cette requête.

Quand l’utiliser

Serveurs qui refusent les envois chunked et doivent connaître la taille du corps à l’avance.

Quand l’éviter

Rarement nécessaire pour les applications ; généralement émis par le serveur web lui-même.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.12

Exemple
HTTP/1.1 411 Length Required
412Precondition Failed

Une condition des en-têtes de la requête (If-Match, If-Unmodified-Since, If-None-Match sur une écriture) s’est révélée fausse.

Quand l’utiliser

Concurrence optimiste : le client a envoyé If-Match avec un ancien ETag, ce qui signifie que quelqu’un d’autre a modifié la ressource avant lui.

Quand l’éviter

Ne l’utilisez pas pour des échecs de règles métier sans rapport avec les en-têtes conditionnels (409 ou 422).

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.13

Exemple
PUT /docs/7 HTTP/1.1
If-Match: "v3"

HTTP/1.1 412 Precondition Failed
ETag: "v4"
413Content Too Large

Le corps de la requête est plus volumineux que ce que le serveur accepte de traiter. Appelé « Payload Too Large » avant la RFC 9110.

Quand l’utiliser

Envois au-delà de la limite (client_max_body_size de nginx, plafond d’API de 10 Mo). Si la limite est temporaire, ajoutez Retry-After.

Quand l’éviter

Pour une URL trop longue, utilisez 414 ; pour des en-têtes trop volumineux, 431.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.14

Exemple
HTTP/1.1 413 Content Too Large
Connection: close
414URI Too LongMis en cache par défaut

La cible de la requête (URL) est plus longue que ce que le serveur accepte d’interpréter.

Quand l’utiliser

Chaînes de requête énormes, souvent un formulaire GET qui devrait être un POST, ou une boucle de redirection qui ajoute sans cesse des paramètres.

Quand l’éviter

Déplacez les grandes entrées dans un corps de requête (POST) plutôt que d’augmenter la limite indéfiniment.

Mise en cache

Mis en cache par défaut (cache heuristique possible)

Défini dans

RFC 9110 §15.5.15

Exemple
HTTP/1.1 414 URI Too Long
415Unsupported Media Type

Le serveur refuse la requête car le format du corps (Content-Type ou Content-Encoding) n’est pas pris en charge.

Quand l’utiliser

Un point de terminaison qui accepte du JSON et reçoit des données de formulaire ou du XML, ou un en-tête Content-Type manquant. Incluez Accept-Post ou Accept-Patch pour indiquer ce qui est accepté.

Quand l’éviter

Pas pour un corps au bon format dont le contenu est invalide (400 ou 422).

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.16

Exemple
HTTP/1.1 415 Unsupported Media Type
Accept-Post: application/json
416Range Not Satisfiable

Aucune des plages d’octets de l’en-tête Range ne chevauche la ressource, par exemple une demande d’octets au-delà de la fin du fichier.

Quand l’utiliser

Téléchargements repris alors que le fichier a rétréci ou que le client demande au-delà de sa fin. Incluez Content-Range: bytes */<length>.

Quand l’éviter

Les serveurs peuvent aussi simplement ignorer une plage invalide et renvoyer 200 avec le corps complet, ce qui est également autorisé.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.17

Exemple
HTTP/1.1 416 Range Not Satisfiable
Content-Range: bytes */47022
417Expectation Failed

Le serveur ne peut pas satisfaire l’exigence de l’en-tête Expect de la requête.

Quand l’utiliser

Un client a envoyé « Expect: 100-continue » à un serveur ou proxy qui ne le prend pas en charge, ou une attente inconnue.

Quand l’éviter

Les clients qui le reçoivent devraient réessayer sans l’en-tête Expect.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.18

Exemple
HTTP/1.1 417 Expectation Failed
418(Unused)

Réservé par la RFC 9110 car 418 a été largement déployé comme code humoristique « I’m a teapot » ; il n’a aucune signification définie en HTTP.

Réservé. Célèbre sous le nom « I’m a teapot », issu de la RFC 2324 (HTCPCP), poisson d’avril de 1998.

Quand l’utiliser

Uniquement comme easter egg. Certains services l’utilisent pour rejeter des requêtes avec humour.

Quand l’éviter

Ne l’utilisez pas pour de vraies erreurs ; aucune signification ne peut lui être attribuée et les clients ne sauront pas quoi faire.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.19

Exemple
HTTP/1.1 418 I'm a teapot
419Page ExpiredNon officiel · Laravel

Laravel le renvoie quand le jeton CSRF est absent ou expiré, généralement après l’expiration d’une session sur une page contenant un formulaire.

Quand l’utiliser

Envoyé par le middleware CSRF de Laravel. Pour corriger : rafraîchir la page, inclure @csrf dans les formulaires ou envoyer l’en-tête X-CSRF-TOKEN avec les requêtes AJAX.

Quand l’éviter

Pas un code standard ; ne l’envoyez pas depuis des API non Laravel.

Mise en cache

Sans objet

Défini dans

Laravel (absent du registre IANA)

Exemple
HTTP/1.1 419 unknown status
420Enhance Your CalmNon officiel · Twitter (ancien)

La réponse de limitation de débit de l’ancienne API Twitter, remplacée par le code standard 429.

Quand l’utiliser

Rien de nouveau. Vous pouvez encore le rencontrer dans d’anciennes bibliothèques clientes. Spring a autrefois défini 420 « Method Failure », désormais obsolète.

Quand l’éviter

Utilisez 429 pour la limitation de débit.

Mise en cache

Sans objet

Défini dans

Twitter API v1 (absent du registre IANA)

Exemple
HTTP/1.1 420 Enhance Your Calm
421Misdirected Request

La requête a atteint un serveur qui ne peut pas produire de réponse pour cet hôte et ce schéma.

Quand l’utiliser

La fusion de connexions HTTP/2 a mal tourné : le navigateur a réutilisé une connexion pour un autre nom d’hôte couvert par le même certificat, mais le serveur ne le sert pas. Le client doit réessayer sur une nouvelle connexion.

Quand l’éviter

Pas pour les noms d’hôte inconnus ordinaires sur un seul serveur ; c’est généralement une 404 ou l’hôte virtuel par défaut.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.20

Exemple
HTTP/2 421
422Unprocessable Content

La requête est bien formée et dans un format pris en charge, mais son contenu échoue à la validation. Appelé « Unprocessable Entity » dans la RFC 4918.

Quand l’utiliser

Erreurs de validation de formulaires et d’API : un e-mail qui n’en est pas un, une date de fin antérieure à la date de début. Rails, Laravel et FastAPI l’utilisent par défaut.

Quand l’éviter

Pour une syntaxe incorrecte (JSON impossible à analyser), utilisez 400.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.21

Exemple
HTTP/1.1 422 Unprocessable Content
Content-Type: application/json

{"errors": {"email": ["is invalid"]}}
423Locked

La ressource est verrouillée : la requête ne peut donc pas la modifier.

WebDAV

Quand l’utiliser

Sémantique LOCK de WebDAV. Certaines API l’utilisent pour des enregistrements en cours de modification par quelqu’un d’autre ou des comptes verrouillés après des échecs de connexion.

Quand l’éviter

En dehors de WebDAV, 409 est mieux compris par les clients génériques.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 4918 §11.3

Exemple
HTTP/1.1 423 Locked
424Failed Dependency

L’action a échoué parce qu’une autre action dont elle dépendait a échoué.

WebDAV

Quand l’utiliser

Dans un PROPPATCH WebDAV ou une requête par lot, les éléments qui n’ont pas été tentés parce qu’un élément précédent a échoué.

Quand l’éviter

Pas pour les pannes de services en amont ; ce sont des 502 ou 503.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 4918 §11.4

Exemple
HTTP/1.1 424 Failed Dependency
425Too Early

Le serveur ne traitera pas une requête envoyée en early data TLS 1.3 (0-RTT), car elle pourrait être rejouée.

Quand l’utiliser

CDN et serveurs qui acceptent le 0-RTT mais rejettent les requêtes non idempotentes (POST) en early data. Le client réessaie une fois le handshake terminé.

Quand l’éviter

Pas un code générique « réessayez plus tard » ; utilisez 503 avec Retry-After pour cela.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 8470 §5.2

Exemple
HTTP/1.1 425 Too Early
426Upgrade Required

Le serveur refuse la requête avec le protocole actuel, mais l’accepterait après une mise à niveau indiquée dans l’en-tête Upgrade.

Quand l’utiliser

Exiger TLS ou un protocole plus récent, ou un point de terminaison WebSocket appelé avec une requête HTTP simple. Doit inclure un en-tête Upgrade.

Quand l’éviter

Pour passer de HTTP à HTTPS sur un site web, l’approche habituelle est une redirection 301 ou 308 avec HSTS.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.5.22

Exemple
HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.3, HTTP/1.1
Connection: Upgrade
428Precondition Required

Le serveur exige que la requête soit conditionnelle (If-Match, etc.) pour éviter les mises à jour perdues.

Quand l’utiliser

API qui exigent que les clients envoient If-Match avec le dernier ETag vu avant un PUT, PATCH ou DELETE.

Quand l’éviter

Utilisez 412 quand une précondition a été envoyée et a échoué ; 428 sert quand aucune n’a été envoyée.

Mise en cache

Ne doit pas être stocké par les caches

Défini dans

RFC 6585 §3

Exemple
HTTP/1.1 428 Precondition Required
Content-Type: application/json

{"error": "Send If-Match with the current ETag"}
429Too Many Requests

Le client a envoyé trop de requêtes en un temps donné (limitation de débit).

Quand l’utiliser

Limites de débit d’API, limitation des tentatives de connexion, protection contre le scraping. Incluez Retry-After pour que les clients bien conçus sachent quand revenir ; les en-têtes RateLimit aident aussi.

Quand l’éviter

Pour un serveur surchargé pour tout le monde, utilisez 503. Googlebot traite 429 comme 503 et ralentit son exploration.

Mise en cache

Ne doit pas être stocké par les caches

Défini dans

RFC 6585 §4

Exemple
HTTP/1.1 429 Too Many Requests
Retry-After: 60
Content-Type: application/json

{"error": "Rate limit exceeded: 100 requests per minute"}
431Request Header Fields Too Large

Les en-têtes, individuellement ou ensemble, sont trop volumineux pour le serveur.

Quand l’utiliser

Généralement des cookies trop volumineux accumulés sur un domaine, ou des jetons Authorization énormes. Effacer les cookies résout souvent le problème pour les utilisateurs.

Quand l’éviter

Pour une URL longue, utilisez 414 ; pour un corps volumineux, 413.

Mise en cache

Ne doit pas être stocké par les caches

Défini dans

RFC 6585 §5

Exemple
HTTP/1.1 431 Request Header Fields Too Large
440Login Time-outNon officiel · Microsoft IIS / Exchange

La session du client a expiré et il doit se reconnecter (Outlook Web Access et autres applications IIS).

Quand l’utiliser

Rencontré dans les environnements Exchange/OWA.

Quand l’éviter

Utilisez 401 pour les sessions expirées dans vos propres applications.

Mise en cache

Sans objet

Défini dans

Microsoft IIS (absent du registre IANA)

Exemple
HTTP/1.1 440 Login Time-out
444No ResponseNon officiel · nginx

Code interne à nginx : « return 444; » ferme la connexion sans envoyer la moindre réponse.

Quand l’utiliser

Rejeter les requêtes des scanners, les requêtes pour des en-têtes Host inconnus dans un bloc server par défaut, ou les clients abusifs. Il apparaît dans les journaux nginx ; le client reçoit une réponse vide.

Quand l’éviter

Le client ne reçoit jamais de 444 : ce n’est donc pas à gérer dans le code client.

Mise en cache

Sans objet

Défini dans

nginx (absent du registre IANA)

Exemple
server {
  listen 80 default_server;
  return 444;
}
449Retry WithNon officiel · Microsoft

Extension Microsoft : la requête doit être renvoyée après que le client a effectué une action précise.

Quand l’utiliser

Rencontré dans certains services Microsoft (Exchange ActiveSync ; Azure Cosmos DB utilise 449 pour les conflits d’écriture qu’on peut retenter).

Quand l’éviter

Non standard ; utilisez 409 ou 503 avec Retry-After dans vos propres API.

Mise en cache

Sans objet

Défini dans

Microsoft IIS (absent du registre IANA)

Exemple
HTTP/1.1 449 Retry With
450Blocked by Windows Parental ControlsNon officiel · Microsoft

Le contrôle parental de Windows a bloqué l’accès à la page.

Quand l’utiliser

Généré sur les systèmes Windows avec contrôle parental.

Quand l’éviter

Ne l’envoyez pas depuis des serveurs.

Mise en cache

Sans objet

Défini dans

Microsoft (absent du registre IANA)

Exemple
HTTP/1.1 450 Blocked by Windows Parental Controls
451Unavailable For Legal ReasonsMis en cache par défaut

L’accès est refusé en raison d’une exigence légale : décision de justice, censure gouvernementale ou restriction géographique pour des raisons juridiques.

Quand l’utiliser

Contenu bloqué dans une juridiction (sanctions, géoblocages liés au RGPD, injonctions de retrait). Un en-tête Link avec rel="blocked-by" peut indiquer qui l’a imposé.

Quand l’éviter

Pas pour les refus d’autorisation ordinaires (403) ni pour un contenu que vous avez simplement choisi de retirer (410).

Mise en cache

Mis en cache par défaut (cache heuristique possible)

Défini dans

RFC 7725 §3

Exemple
HTTP/1.1 451 Unavailable For Legal Reasons
Link: <https://authority.example/>; rel="blocked-by"
460Client closed connection (AWS ELB)Non officiel · AWS Application Load Balancer

Journalisé par un ALB AWS quand le client a fermé la connexion avant l’expiration du délai d’inactivité.

Quand l’utiliser

Rencontré dans les journaux d’accès ALB ; généralement un client dont le délai est plus court que le temps de traitement de la cible.

Quand l’éviter

Non envoyé aux clients.

Mise en cache

Sans objet

Défini dans

AWS Elastic Load Balancing (absent du registre IANA)

Exemple
elb_status_code=460
463Too many IPs in X-Forwarded-For (AWS ELB)Non officiel · AWS Application Load Balancer

L’ALB a reçu un en-tête X-Forwarded-For contenant plus de 30 adresses IP.

Quand l’utiliser

Généralement une boucle de proxy qui ajoute sans cesse des adresses.

Quand l’éviter

Pas pour un usage applicatif.

Mise en cache

Sans objet

Défini dans

AWS Elastic Load Balancing (absent du registre IANA)

Exemple
HTTP/1.1 463
494Request Header Too LargeNon officiel · nginx

Code interne à nginx pour des en-têtes dépassant large_client_header_buffers ; le client reçoit une 400.

Quand l’utiliser

Apparaît dans les journaux nginx et la configuration error_page.

Quand l’éviter

Le code standard est 431.

Mise en cache

Sans objet

Défini dans

nginx (absent du registre IANA)

Exemple
error_page 494 /header-too-large.html;
495SSL Certificate ErrorNon officiel · nginx

Interne à nginx : le client a présenté un certificat client invalide (TLS mutuel). Envoyé au client sous forme de 400.

Quand l’utiliser

Pages d’erreur personnalisées pour les échecs mTLS.

Quand l’éviter

Pas un code d’état transmis sur le réseau.

Mise en cache

Sans objet

Défini dans

nginx (absent du registre IANA)

Exemple
error_page 495 /bad-client-cert.html;
496SSL Certificate RequiredNon officiel · nginx

Interne à nginx : un certificat client était requis mais n’a pas été fourni. Envoyé au client sous forme de 400.

Quand l’utiliser

Pages d’erreur personnalisées quand ssl_verify_client est activé.

Quand l’éviter

Pas un code d’état transmis sur le réseau.

Mise en cache

Sans objet

Défini dans

nginx (absent du registre IANA)

Exemple
error_page 496 /client-cert-required.html;
497HTTP Request Sent to HTTPS PortNon officiel · nginx

Interne à nginx : une requête HTTP simple est arrivée sur un port qui attend du TLS. Envoyé au client sous forme de 400.

Quand l’utiliser

Une astuce courante est « error_page 497 =301 https://$host$request_uri; » pour rediriger ces requêtes vers HTTPS.

Quand l’éviter

Pas un code d’état transmis sur le réseau.

Mise en cache

Sans objet

Défini dans

nginx (absent du registre IANA)

Exemple
error_page 497 =301 https://$host:$server_port$request_uri;
498Invalid TokenNon officiel · Esri ArcGIS Server

ArcGIS le renvoie pour un jeton expiré ou invalide pour une autre raison.

Quand l’utiliser

Pertinent uniquement lors d’appels aux services ArcGIS.

Quand l’éviter

Utilisez 401 pour les jetons invalides dans vos propres API.

Mise en cache

Sans objet

Défini dans

Esri ArcGIS (absent du registre IANA)

Exemple
HTTP/1.1 498 Invalid Token
499Client Closed RequestNon officiel · nginx

nginx journalise 499 quand le client a fermé la connexion avant que nginx n’envoie de réponse.

Quand l’utiliser

Rencontré dans les journaux d’accès : utilisateurs qui quittent la page, clients mobiles qui expirent, ou répartiteur de charge devant nginx avec un délai plus court. Beaucoup de 499 sur un même point de terminaison signifient généralement qu’il est trop lent.

Quand l’éviter

Le client ne le reçoit jamais. Esri utilise aussi 499 pour « Token Required ».

Mise en cache

Sans objet

Défini dans

nginx (absent du registre IANA)

Exemple
203.0.113.9 - - [16/Oct/2026:10:12:01 +0000] "GET /report HTTP/1.1" 499 0

5xx Erreur serveur

500Internal Server Error

Le serveur a rencontré une condition inattendue qui l’a empêché de répondre à la requête.

Quand l’utiliser

Exceptions non gérées et bugs. C’est le repli générique quand aucun code 5xx plus précis ne s’applique.

Quand l’éviter

Ne l’utilisez pas pour les erreurs du client (4xx). N’exposez pas de traces d’appels dans le corps en production ; journalisez-les plutôt.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.6.1

Exemple
HTTP/1.1 500 Internal Server Error
Content-Type: application/problem+json

{"title": "Internal Server Error", "traceId": "4bf92f35"}
501Not ImplementedMis en cache par défaut

Le serveur ne prend pas en charge la fonctionnalité requise, généralement une méthode HTTP qu’il ne reconnaît pas du tout.

Quand l’utiliser

Une requête avec une méthode inconnue (p. ex. une méthode WebDAV sur un simple serveur web), ou une fonctionnalité que le serveur n’a délibérément pas encore développée.

Quand l’éviter

Si la méthode est connue mais non autorisée sur cette URL, utilisez 405.

Mise en cache

Mis en cache par défaut (cache heuristique possible)

Défini dans

RFC 9110 §15.6.2

Exemple
HTTP/1.1 501 Not Implemented
502Bad Gateway

Une passerelle ou un proxy a reçu une réponse invalide du serveur en amont.

Quand l’utiliser

Envoyé par les reverse proxys et répartiteurs de charge (nginx, Cloudflare, AWS ALB) quand le serveur d’application a planté, fermé la connexion ou renvoyé n’importe quoi.

Quand l’éviter

Le code applicatif a rarement besoin de l’envoyer, sauf les passerelles d’API qui appellent un autre service en échec.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.6.3

Exemple
HTTP/1.1 502 Bad Gateway
Server: nginx
503Service Unavailable

Le serveur ne peut pas traiter la requête pour le moment : surcharge ou maintenance. Censé être temporaire.

Quand l’utiliser

Maintenance planifiée, délestage, panne d’une dépendance. Ajoutez Retry-After. Les moteurs de recherche gardent la page indexée pendant de courtes périodes de 503, contrairement à une page de maintenance en 200 ou à une 404.

Quand l’éviter

Ne laissez pas un site en 503 pendant des jours ; Google finit par retirer les URL qui continuent de le renvoyer.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.6.4

Exemple
HTTP/1.1 503 Service Unavailable
Retry-After: 3600
504Gateway Timeout

Une passerelle ou un proxy n’a pas reçu de réponse à temps du serveur en amont.

Quand l’utiliser

Envoyé par les proxys et répartiteurs de charge quand l’application met plus de temps que le délai du proxy (proxy_read_timeout de nginx vaut 60 secondes par défaut).

Quand l’éviter

Pour les tâches longues, n’augmentez pas simplement les délais ; renvoyez 202 et traitez de façon asynchrone.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.6.5

Exemple
HTTP/1.1 504 Gateway Timeout
Server: awselb/2.0
505HTTP Version Not Supported

Le serveur ne prend pas en charge la version majeure de HTTP utilisée dans la requête.

Quand l’utiliser

Un serveur qui reçoit une version de protocole qu’il ne sait pas parler.

Quand l’éviter

Rarement rencontré ; les clients négocient HTTP/2 et HTTP/3 via ALPN et Alt-Svc plutôt qu’à tâtons.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 9110 §15.6.6

Exemple
HTTP/1.1 505 HTTP Version Not Supported
506Variant Also Negotiates

Erreur de configuration du serveur : la variante choisie est elle-même configurée pour négocier, ce qui crée une boucle.

Négociation de contenu transparente (expérimental)

Quand l’utiliser

Uniquement les serveurs qui implémentent la négociation de contenu transparente de la RFC 2295.

Quand l’éviter

Pas pour les erreurs applicatives.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 2295 §8.1

Exemple
HTTP/1.1 506 Variant Also Negotiates
507Insufficient Storage

Le serveur ne peut pas stocker ce qui est nécessaire pour mener à bien la requête.

WebDAV

Quand l’utiliser

API WebDAV ou de stockage de fichiers quand le disque ou le quota de l’utilisateur est plein.

Quand l’éviter

Pour un envoi unique qui dépasse une limite de taille, 413 est plus clair.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 4918 §11.5

Exemple
HTTP/1.1 507 Insufficient Storage
508Loop Detected

Le serveur a interrompu une opération car il a détecté une boucle infinie (bindings WebDAV avec Depth: infinity).

WebDAV

Quand l’utiliser

Serveurs WebDAV. Les hébergements mutualisés basés sur CloudLinux envoient aussi 508 « Resource Limit Is Reached » quand un compte atteint ses limites, ce qui n’est pas standard.

Quand l’éviter

Pas pour les boucles de redirection ; ce sont des erreurs côté client que le navigateur signale lui-même.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 5842 §7.2

Exemple
HTTP/1.1 508 Loop Detected
509Bandwidth Limit ExceededNon officiel · Apache bw_mod / cPanel

Le compte d’hébergement a dépassé son quota de bande passante.

Quand l’utiliser

Panneaux de contrôle d’hébergement mutualisé.

Quand l’éviter

Utilisez 503 ou 429 dans vos propres systèmes.

Mise en cache

Sans objet

Défini dans

Apache / cPanel (absent du registre IANA)

Exemple
HTTP/1.1 509 Bandwidth Limit Exceeded
510Not ExtendedObsolète

La requête ne respectait pas la politique d’accès à la ressource selon le HTTP Extension Framework.

Marqué obsolète dans le registre IANA : la RFC 2774 a été classée Historic.

Quand l’utiliser

Rien d’actuel ; le framework d’extension n’a jamais été largement implémenté.

Quand l’éviter

Ne l’envoyez pas.

Mise en cache

Mis en cache uniquement avec Cache-Control ou Expires explicite

Défini dans

RFC 2774 §7

Exemple
HTTP/1.1 510 Not Extended
511Network Authentication Required

Le client doit s’authentifier pour accéder au réseau : un portail captif.

Quand l’utiliser

Portails Wi-Fi d’hôtels, d’aéroports et de cafés qui interceptent le trafic jusqu’à ce que l’utilisateur se connecte ou accepte les conditions.

Quand l’éviter

Les serveurs d’origine ne doivent jamais l’envoyer ; il est réservé aux proxys réseau d’interception.

Mise en cache

Ne doit pas être stocké par les caches

Défini dans

RFC 6585 §6

Exemple
HTTP/1.1 511 Network Authentication Required
Content-Type: text/html

<meta http-equiv="refresh" content="0; url=https://login.example.net/">
520Web Server Returned an Unknown ErrorNon officiel · Cloudflare

L’origine a renvoyé à Cloudflare une réponse vide, inconnue ou inattendue.

Quand l’utiliser

Vérifiez les journaux de l’origine : plantages, réinitialisations de connexion, en-têtes au-delà de la limite de Cloudflare, ou réponse vide.

Quand l’éviter

Seul Cloudflare l’envoie.

Mise en cache

Sans objet

Défini dans

Cloudflare (absent du registre IANA)

Exemple
HTTP/2 520
server: cloudflare
521Web Server Is DownNon officiel · Cloudflare

Cloudflare n’a pas pu se connecter à l’origine : la connexion a été refusée.

Quand l’utiliser

Le serveur web d’origine est arrêté, ou un pare-feu bloque les plages d’IP de Cloudflare.

Quand l’éviter

Seul Cloudflare l’envoie.

Mise en cache

Sans objet

Défini dans

Cloudflare (absent du registre IANA)

Exemple
HTTP/2 521
server: cloudflare
522Connection Timed OutNon officiel · Cloudflare

Cloudflare a dépassé le délai en établissant une connexion TCP vers l’origine.

Quand l’utiliser

Origine surchargée, paquets rejetés par un pare-feu ou mauvaise IP d’origine dans le DNS.

Quand l’éviter

Seul Cloudflare l’envoie.

Mise en cache

Sans objet

Défini dans

Cloudflare (absent du registre IANA)

Exemple
HTTP/2 522
server: cloudflare
523Origin Is UnreachableNon officiel · Cloudflare

Cloudflare ne parvient pas du tout à joindre l’origine, généralement un problème de routage ou un mauvais enregistrement DNS.

Quand l’utiliser

Vérifiez que les enregistrements DNS A/AAAA pointent vers la bonne IP, joignable.

Quand l’éviter

Seul Cloudflare l’envoie.

Mise en cache

Sans objet

Défini dans

Cloudflare (absent du registre IANA)

Exemple
HTTP/2 523
server: cloudflare
524A Timeout OccurredNon officiel · Cloudflare

Cloudflare s’est connecté à l’origine, mais celle-ci n’a pas envoyé de réponse HTTP dans le délai imparti (100 secondes par défaut).

Quand l’utiliser

Requêtes longues : déplacez le travail dans une tâche en arrière-plan et interrogez son état, ou diffusez la progression en continu.

Quand l’éviter

Seul Cloudflare l’envoie.

Mise en cache

Sans objet

Défini dans

Cloudflare (absent du registre IANA)

Exemple
HTTP/2 524
server: cloudflare
525SSL Handshake FailedNon officiel · Cloudflare

Le handshake TLS entre Cloudflare et l’origine a échoué.

Quand l’utiliser

Origine qui n’écoute pas sur le port 443, absence de certificat, aucune suite de chiffrement commune ou SNI non configuré, alors que le mode SSL est Full ou Full (strict).

Quand l’éviter

Seul Cloudflare l’envoie.

Mise en cache

Sans objet

Défini dans

Cloudflare (absent du registre IANA)

Exemple
HTTP/2 525
server: cloudflare
526Invalid SSL CertificateNon officiel · Cloudflare

En mode Full (strict), Cloudflare n’a pas pu valider le certificat de l’origine : expiré, autosigné ou mauvais nom d’hôte.

Quand l’utiliser

Installez un certificat valide ou un certificat Cloudflare Origin CA sur l’origine.

Quand l’éviter

Seul Cloudflare l’envoie.

Mise en cache

Sans objet

Défini dans

Cloudflare (absent du registre IANA)

Exemple
HTTP/2 526
server: cloudflare
527Railgun ErrorNon officiel · Cloudflare (retiré)Obsolète

Problème de connexion entre Cloudflare et un écouteur Railgun sur l’origine. Cloudflare a abandonné Railgun.

Quand l’utiliser

Historique uniquement.

Quand l’éviter

Seul Cloudflare l’envoyait.

Mise en cache

Sans objet

Défini dans

Cloudflare (absent du registre IANA)

Exemple
HTTP/1.1 527 Railgun Error
530Origin DNS / 1xxx errorNon officiel · Cloudflare

Renvoyé avec une page d’erreur Cloudflare 1xxx (comme 1016 Origin DNS error) ; le code 1xxx affiché sur la page est la vraie cause.

Quand l’utiliser

Recherchez le numéro d’erreur 1xxx affiché sur la page.

Quand l’éviter

Seuls les CDN et les hébergeurs l’envoient.

Mise en cache

Sans objet

Défini dans

Cloudflare (absent du registre IANA)

Exemple
HTTP/2 530
server: cloudflare
561Unauthorized (AWS ELB)Non officiel · AWS Application Load Balancer

L’authentification intégrée de l’ALB (OIDC ou Cognito) a échoué auprès du fournisseur d’identité.

Quand l’utiliser

Vérifiez la configuration IdP de la règle d’écouteur de l’ALB.

Quand l’éviter

Pas pour un usage applicatif.

Mise en cache

Sans objet

Défini dans

AWS Elastic Load Balancing (absent du registre IANA)

Exemple
HTTP/1.1 561
598Network Read Timeout ErrorNon officiel · Certains proxys HTTP

Utilisé par certains proxys pour signaler un délai de lecture dépassé derrière le proxy.

Quand l’utiliser

Rare ; vous pouvez le rencontrer avec certains produits proxy.

Quand l’éviter

Utilisez 504.

Mise en cache

Sans objet

Défini dans

Informal convention (absent du registre IANA)

Exemple
HTTP/1.1 598
599Network Connect Timeout ErrorNon officiel · Certains proxys et clients HTTP

Utilisé par certains proxys et bibliothèques clientes (le client HTTP de Tornado, par exemple) pour un délai de connexion dépassé.

Quand l’utiliser

Rare.

Quand l’éviter

Utilisez 504 pour les proxys.

Mise en cache

Sans objet

Défini dans

Informal convention (absent du registre IANA)

Exemple
HTTP/1.1 599

Une référence statique qui fonctionne dans votre navigateur ; vos recherches ne sont envoyées nulle part. Parcourir tous les outils gratuits.

Un problème, ou quelque chose à améliorer ? Nous lisons chaque message et corrigeons vite.

Cette liste des codes de statut HTTP couvre tous les codes du registre de l’IANA, de 100 Continue à 511 Network Authentication Required, avec leur signification, quand les utiliser, quand ne pas les utiliser, si les caches peuvent les stocker, et la section de la RFC qui les définit. Tapez un numéro, une classe comme 4xx ou un mot comme “redirect” ou “rate limit” pour filtrer, et créez un lien direct vers n’importe quel code avec une ancre comme #404 ou #503.

Les entrées officielles suivent la RFC 9110 (2022), qui a remplacé la RFC 7231 et renommé quelques codes : 413 s’appelle désormais Content Too Large et 422 Unprocessable Content. Les codes qu’on voit dans les journaux mais pas dans le registre, comme le 499 de nginx ou le 522 de Cloudflare, sont également inclus et signalés comme non officiels, avec le système qui les envoie. C’est une référence, pas un outil de surveillance : il ne récupère pas d’URL et ne vérifie pas le statut renvoyé par un site en ligne.

Mode d’emploi

  1. Tapez un code (503), une classe (4xx) ou un mot-clé (timeout, redirect, cache) dans la zone de recherche. Les résultats se filtrent pendant la saisie.
  2. Utilisez les boutons de classe pour n’afficher que les codes 1xx, 2xx, 3xx, 4xx ou 5xx, et décochez « Inclure les codes non officiels » pour masquer ceux propres à un éditeur.
  3. Cliquez sur un code pour le déplier : signification, quand l’utiliser, quand ne pas l’utiliser, comportement de cache, RFC de définition et exemple de réponse.
  4. Utilisez « Copier le lien vers ce code » pour partager un lien direct comme /tools/http-status-codes#429.

Questions fréquentes

Quelle est la différence entre 401 et 403 ?

401 Unauthorized signifie que la requête n’a pas d’identifiants valides : le client n’est pas connecté, ou le jeton a expiré. Le serveur doit envoyer un en-tête WWW-Authenticate indiquant comment s’authentifier. 403 Forbidden signifie que le serveur sait qui est le client, ou n’a pas besoin de le savoir, et refuse quand même ; se reconnecter n’y changera rien. En bref, 401, c’est « qui êtes-vous ? » et 403, c’est « je sais, et c’est non ».

Faut-il utiliser 301 ou 308 pour une redirection permanente ?

Les deux sont permanentes et transmettent toutes deux les signaux de classement dans Google. La différence porte sur la méthode : en suivant une 301, les navigateurs peuvent transformer un POST en GET, alors qu’une 308 oblige le client à répéter la même méthode et le même corps. Pour un simple déplacement de page, 301 convient ; pour un point de terminaison d’API qui reçoit des POST ou des PUT, utilisez 308. La même paire existe pour les redirections temporaires : 302 peut changer la méthode, 307 ne le doit pas.

Que signifie 499 dans les journaux nginx ?

499 Client Closed Request est un code propre à nginx. Il est journalisé quand le client a fermé la connexion avant que nginx envoie une réponse : le client ne reçoit donc jamais réellement de 499. Des 499 occasionnels correspondent à des utilisateurs qui quittent la page ; beaucoup sur un même point de terminaison signifient généralement qu’il est trop lent et que les clients ou un répartiteur de charge en amont abandonnent avant.

Quelle est la différence entre 502, 503 et 504 ?

Les trois proviennent d’un serveur placé devant un autre. 502 Bad Gateway signifie que le proxy a reçu une réponse invalide ou une connexion coupée de l’application en amont. 503 Service Unavailable signifie que le serveur est temporairement incapable de traiter les requêtes, généralement pour cause de surcharge ou de maintenance, et devrait inclure Retry-After. 504 Gateway Timeout signifie que le proxy a cessé d’attendre la réponse de l’amont.

418 I’m a teapot est-il un vrai code de statut ?

Il est né d’un poisson d’avril dans la RFC 2324 (1998) et a été implémenté par assez de logiciels pour que la RFC 9110 liste désormais 418 comme « (Unused) » : réservé pour ne jamais recevoir de vraie signification. Ce n’est pas une erreur à envoyer pour de vrais problèmes, mais vous pouvez sans risque le garder dans un easter egg.

Quels codes de statut peuvent être mis en cache par défaut ?

La RFC 9110 désigne 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414 et 501 comme cachables par heuristique : un cache peut les stocker même sans Cache-Control ni Expires. La RFC 7725 ajoute 451. Les autres codes, dont 302 et 307, ne sont mis en cache que si la réponse porte des informations de fraîcheur explicites, et la RFC 6585 précise que 428, 429, 431 et 511 ne doivent jamais être stockés.

Les cinq classes en un coup d'œil

• 1xx Information : réponses intermédiaires avant la réponse finale. Vous les traitez rarement directement ; 101 (passage à WebSocket) et 103 (Early Hints) sont ceux qui comptent en pratique.

• 2xx Succès : la requête a abouti. 200 pour une réponse normale, 201 quand quelque chose a été créé (avec un en-tête Location), 204 quand il n’y a volontairement pas de corps.

• 3xx Redirection : le client doit chercher ailleurs. 301/308 pour les déplacements permanents, 302/307 pour les temporaires, 303 après un POST de formulaire, 304 quand la copie en cache est encore valide.

• 4xx Erreur client : la requête est incorrecte et la répéter telle quelle échouera de nouveau. 400 mal formée, 401 non authentifié, 403 non autorisé, 404 introuvable, 409 conflit, 422 validation échouée, 429 limite de débit atteinte.

• 5xx Erreur serveur : la requête est peut-être correcte, mais le serveur a échoué. 500 est un bug, 502/504 sont des échecs entre le proxy et l’amont, 503 est une indisponibilité temporaire.

Choisir le bon code dans une API

Renvoyez le code le plus précis sur lequel un client générique peut agir, et mettez le détail dans le corps. Un client HTTP qui réessaie, un CDN ou un système de surveillance sait ce que signifient 429 et 503 sans lire votre JSON, mais il ne peut pas interpréter un 200 avec {"error": true}. La RFC 9457 (Problem Details) définit un format JSON standard pour les corps d’erreur.

Une correspondance pratique pour la plupart des API JSON : 400 pour une entrée illisible, 422 pour une entrée bien formée qui échoue à la validation, 401 quand le jeton manque ou a expiré, 403 quand l’utilisateur n’a pas la permission, 404 pour les identifiants inconnus (et pour masquer les ressources qu’un utilisateur ne doit pas voir), 409 pour les doublons et les conflits de version, 412 quand un ETag If-Match est périmé, 429 avec Retry-After pour les limites de débit, et 503 avec Retry-After pour une maintenance planifiée.

N’inventez pas de nouveaux numéros. Les clients traitent un code inconnu comme le x00 de sa classe (un 4xx inconnu est traité comme 400) : un 461 personnalisé ne vous apporte donc rien de plus qu’un 400 accompagné d’un message clair.

Codes de statut et SEO

Les moteurs de recherche prennent les codes de statut au pied de la lettre. Une 301 ou une 308 transfère les signaux de l’ancienne URL vers la nouvelle ; une 302 ou une 307 indique à Google de garder l’ancienne URL dans l’index. 404 et 410 retirent tous deux une page de l’index avec le temps. Une page en 200 qui affiche « introuvable » est une soft 404, que Google détecte et signale dans la Search Console. Pour une maintenance, une courte période de 503 avec Retry-After préserve les classements, alors qu’une page en 200 « nous revenons bientôt » peut remplacer votre contenu dans les résultats de recherche. Googlebot ralentit aussi son exploration quand il voit des 429, 500 ou 503.

Outils gratuits similaires

  • Analyseur de user agent — Affichez votre propre user agent et vos client hints, ou analysez n’importe quelle chaîne UA en navigateur, moteur, OS, appareil et processeur. Mode par lot avec CSV.
  • Formateur JSON — Indentez, minifiez et validez du JSON, avec les erreurs d’analyse localisées par ligne et colonne. Dans votre navigateur, sans envoi.
  • Docker Run ⇄ Compose — Transformez une commande docker run en service docker-compose.yml, ou un service Compose en commande docker run.
  • Testeur de regex — Testez une expression régulière sur un texte d’exemple avec surlignage des correspondances en direct, groupes de capture et aperçu du remplacement. Gratuit, dans votre navigateur.