Codes de statut HTTP : la liste complète, expliquée et commentée
Chaque page web que vous ouvrez commence par un nombre à trois chiffres que vous ne voyez jamais. Ce guide traduit et commente l'intégralité des codes HTTP : ce qu'ils signifient réellement, qui les a émis (serveur d'origine, proxy, CDN ou navigateur) et ce qu'il faut faire quand ils vous barrent la route.
L'essentiel
- Le premier chiffre suffit à situer le problème : 1xx provisoire, 2xx réussi, 3xx déplacé, 4xx requête fautive, 5xx serveur fautif.
- Un code n'a de sens qu'associé à son émetteur : une erreur 404 du serveur d'origine et une erreur 404 d'un CDN ne se corrigent pas au même endroit.
- Les codes 4xx ne sont pas toujours de votre faute : 429, 403 et 451 dépendent souvent de votre adresse IP, de votre pays ou de votre opérateur.
- Les codes 444, 499, 520 à 527 que l'on croise dans les journaux ne font pas partie du protocole : ce sont des inventions de Nginx et de Cloudflare.
- Une seule commande,
curl -I, révèle le code réel d'une page : souvent différent de ce que le contenu affiche.
Comment lire un code en une seconde
Toute réponse HTTP commence par une ligne de statut contenant un entier à trois chiffres, défini aujourd'hui par la RFC 9110 publiée en juin 2022, et enregistré auprès de l'IANA. Le premier chiffre porte à lui seul l'essentiel de l'information : il classe la réponse dans l'une des cinq familles, et un client conforme doit savoir traiter un code inconnu comme le code « x00 » de sa famille. C'est pourquoi un navigateur confronté à un 499 fantaisiste le traitera comme un 400.
| 1xx : Information | Réponse provisoire, envoyée avant la vraie réponse. Le client doit pouvoir l'ignorer. Vous ne la verrez jamais dans un navigateur. |
|---|---|
| 2xx : Succès | La requête a été reçue, comprise et acceptée. Ce n'est pas une garantie sur le contenu : seulement sur le déroulement de l'échange. |
| 3xx : Redirection | Une action supplémentaire est nécessaire, presque toujours suivre l'en-tête Location. Les navigateurs limitent le nombre de sauts pour éviter les boucles. |
| 4xx : Erreur du client | Le serveur estime que la requête est fautive : adresse erronée, droits manquants, format refusé, débit excessif. |
| 5xx : Erreur du serveur | La requête paraît valide mais le serveur n'a pas pu la traiter. Réessayer plus tard a du sens, contrairement au 4xx. |
Deux détails changent la lecture d'un code. D'abord, la phrase qui accompagne le nombre (« OK », « Not Found ») est purement décorative : aucun client ne s'en sert, et elle n'existe même plus en HTTP/2 et HTTP/3, où seul le pseudo-en-tête :status est transmis. Ensuite, le code renvoyé et le contenu affiché peuvent se contredire : une page qui affiche « erreur 404 » tout en répondant 200 est une soft 404, invisible à l'œil nu mais parfaitement visible pour un moteur de recherche.
Le second réflexe consiste à identifier l'émetteur. Un même 503 peut venir de l'application, du serveur web devant elle, d'un répartiteur de charge ou d'un CDN situé à des milliers de kilomètres du serveur d'origine. L'en-tête Server, la présence d'un identifiant de trace propre au CDN et l'apparence de la page d'erreur trahissent presque toujours le coupable. Notre outil mes en-têtes HTTP montre l'autre moitié de cet échange : ce que votre navigateur, lui, envoie à chaque requête.
Le tableau complet des codes HTTP
Le tableau ci-dessous couvre les codes normalisés par l'IETF, ceux hérités de WebDAV, et les codes propriétaires que l'on rencontre le plus souvent dans les journaux de serveurs. La colonne « Que faire » distingue systématiquement l'action côté visiteur et l'action côté administrateur. Utilisez la recherche pour un code précis, ou les filtres pour parcourir une famille entière.
| Code | Nom | Signification | Que faire |
|---|---|---|---|
100 |
Continuer Continue |
Réponse provisoire : le serveur accepte de recevoir le corps annoncé par l'en-tête Expect: 100-continue. Elle évite d'envoyer un fichier volumineux pour rien. |
Rien : le client enchaîne seul. Un envoi qui se fige ici trahit un intermédiaire qui ne gère pas Expect. |
101 |
Changement de protocole Switching Protocols |
Le serveur accepte l'en-tête Upgrade et bascule vers un autre protocole, en pratique presque toujours WebSocket. |
Si une application temps réel n'obtient jamais de 101, cherchez un proxy qui supprime les en-têtes Upgrade et Connection. |
102 |
Traitement en cours Processing |
Extension WebDAV : le serveur a bien reçu la requête et travaille encore, afin que le client n'abandonne pas. Devenue très rare. | Attendre. Aucun navigateur grand public ne l'expose à l'utilisateur. |
103 |
Indices anticipés Early Hints |
RFC 8297 : envoyée avant la réponse finale, elle transporte des en-têtes Link de préchargement pour que le navigateur télécharge feuilles de style et polices sans attendre. |
Rien : c'est une optimisation de performance, transparente pour le visiteur. |
200 |
OK OK |
La requête a abouti et le corps de la réponse contient la ressource demandée. | Vérifier tout de même le contenu : une page d'erreur servie avec un 200 est une soft 404 que les moteurs sanctionnent. |
201 |
Créé Created |
Une ressource a été créée, généralement à la suite d'un POST ou d'un PUT. L'en-tête Location doit indiquer son adresse. |
Côté API, lire Location plutôt que de deviner l'identifiant attribué. |
202 |
Accepté Accepted |
La demande est acceptée mais son traitement n'est pas terminé, et rien ne garantit qu'il réussira. Typique des files d'attente et des traitements différés. | Interroger l'URL de suivi fournie. Ne jamais présenter un 202 à l'utilisateur comme une confirmation définitive. |
203 |
Information non certifiée Non-Authoritative Information |
La réponse aurait été un 200, mais un intermédiaire l'a modifiée en route : proxy transformant, filtre d'entreprise, compresseur d'images d'opérateur. | Se méfier du contenu : il a été altéré. Une connexion en HTTPS de bout en bout empêche ce type de manipulation. |
204 |
Pas de contenu No Content |
Succès sans corps de réponse. Employée par DELETE, par les envois en arrière-plan et par les tests de connectivité des systèmes d'exploitation. | Comportement normal : le navigateur reste sur la page en cours sans rien recharger. |
205 |
Réinitialiser le contenu Reset Content |
Succès, assorti d'une demande de remise à zéro du formulaire affiché. Très peu implémentée. | Rien : aucun navigateur moderne ne réinitialise réellement le document. |
206 |
Contenu partiel Partial Content |
Réponse à une requête Range : seul un morceau du fichier est transmis. C'est le mécanisme de la reprise de téléchargement et du déplacement dans une vidéo. |
Vérifier Accept-Ranges: bytes et Content-Range. Un serveur qui ignore Range casse la lecture en flux. |
207 |
États multiples Multi-Status |
WebDAV : le corps XML contient un statut distinct pour chaque sous-ressource traitée. | Lire le XML : un 207 global peut masquer plusieurs échecs individuels. |
208 |
Déjà signalé Already Reported |
WebDAV (RFC 5842) : l'élément a déjà été décrit plus haut dans la même réponse 207 et n'est pas répété. | Rien : détail interne au protocole d'édition à distance. |
226 |
Manipulation d'instance utilisée IM Used |
RFC 3229 : la réponse est un différentiel par rapport à une version déjà détenue par le client. Pratiquement jamais rencontrée sur le web public. | Aucune action. |
300 |
Choix multiples Multiple Choices |
Plusieurs représentations existent et le serveur laisse le client choisir. Aucun comportement automatique n'est normalisé. | Rien du côté du navigateur : le choix doit être présenté par le contenu de la réponse. |
301 |
Déplacé définitivement Moved Permanently |
L'adresse a changé pour de bon. Navigateurs et moteurs mémorisent la nouvelle. Dans les faits, un POST est rejoué en GET. | À réserver aux déplacements irréversibles, et à vérifier avant publication : une 301 erronée reste mémorisée chez vos visiteurs. |
302 |
Trouvé Found |
Redirection temporaire : l'URL d'origine reste la référence. Comme la 301, elle transforme un POST en GET dans tous les navigateurs. | Préférer 307 si la méthode doit être conservée, ou 303 juste après la soumission d'un formulaire. |
303 |
Voir ailleurs See Other |
Le résultat se trouve à une autre adresse, à récupérer en GET. C'est le code du schéma POST puis redirection puis GET. | L'utiliser après validation d'un formulaire : cela empêche la double soumission au rechargement de la page. |
304 |
Non modifié Not Modified |
La copie en cache du client est toujours valable, d'après If-None-Match ou If-Modified-Since. La réponse n'a pas de corps. |
Signe d'un cache qui fonctionne. Pour tester une page « à froid », cocher « Désactiver le cache » dans l'onglet Réseau. |
305 |
Utiliser un proxy Use Proxy |
Obsolète : elle indiquait un proxy à emprunter. Les navigateurs l'ignorent pour des raisons de sécurité évidentes. | Ne jamais l'émettre. |
306 |
Inutilisée (Unused) |
Code réservé, plus attribué. Il décrivait un mécanisme abandonné avant la finalisation de HTTP/1.1. | Aucune : vous ne le rencontrerez pas. |
307 |
Redirection temporaire Temporary Redirect |
Comme 302, mais la méthode et le corps sont obligatoirement conservés : un POST reste un POST. | Le bon choix pour dérouter temporairement un appel d'API ou un envoi de formulaire. |
308 |
Redirection permanente Permanent Redirect |
Équivalent permanent du 307, normalisé par la RFC 7538 en 2015. Méthode et corps préservés. | Préférable à 301 dès qu'une URL reçoit autre chose que des GET. |
400 |
Requête incorrecte Bad Request |
Le serveur ne comprend pas la requête : syntaxe invalide, en-tête malformé, cookie corrompu. Un cookie abîmé pour ce domaine suffit souvent à la déclencher. | Supprimer les cookies du site puis réessayer. Sur une API, comparer octet par octet le corps envoyé au format attendu. |
401 |
Non authentifié Unauthorized |
Mal nommée : il manque une authentification valide, pas une autorisation. La réponse doit contenir un en-tête WWW-Authenticate. |
Fournir des identifiants ou un jeton valide. Si vous étiez connecté, la session a probablement expiré. |
402 |
Paiement requis Payment Required |
Réservée à l'origine pour un usage futur, elle sert aujourd'hui à certaines API pour signaler un quota épuisé ou un abonnement impayé. | Consulter la documentation du service : le sens exact est propre à chaque éditeur. |
403 |
Interdit Forbidden |
Le serveur a compris et refuse. S'authentifier de nouveau ne changera rien. Causes courantes : droits de fichiers, règle de pare-feu applicatif, filtrage géographique, réputation d'adresse IP. | Côté serveur, vérifier permissions et règles. Côté visiteur, tester sans VPN et contrôler si l'adresse est listée. |
404 |
Non trouvé Not Found |
Aucune ressource ne correspond à cette adresse. Le serveur ne précise pas si elle n'a jamais existé ou si elle a disparu : c'est volontaire. | Contrôler l'orthographe de l'URL et les liens qui y mènent. Pour une suppression assumée, préférer 410. |
405 |
Méthode non autorisée Method Not Allowed |
La ressource existe mais n'accepte pas ce verbe : un POST envoyé vers un fichier statique, par exemple. La réponse doit lister les verbes admis dans Allow. |
Lire l'en-tête Allow, qui donne directement la réponse. |
406 |
Non acceptable Not Acceptable |
Aucune représentation ne satisfait les en-têtes Accept, Accept-Language ou Accept-Encoding. En hébergement mutualisé, elle provient souvent d'une règle de sécurité plutôt que d'une vraie négociation de contenu. |
Simplifier la requête. Sur son propre site, examiner les journaux du pare-feu applicatif avant de conclure. |
407 |
Authentification proxy requise Proxy Authentication Required |
Identique au 401, mais c'est le proxy intermédiaire qui exige des identifiants, via Proxy-Authenticate. |
Typique d'un réseau d'entreprise : renseigner le proxy et ses identifiants dans les paramètres du système. |
408 |
Délai de requête dépassé Request Timeout |
Le client a mis trop de temps à envoyer sa requête, ou le serveur a fermé une connexion restée inactive. | Réessayer. Si le phénomène se répète, suspecter une liaison montante très lente ou un envoi de fichier interrompu. |
409 |
Conflit Conflict |
La demande entre en conflit avec l'état actuel de la ressource : modification d'une version périmée, création d'un élément déjà existant. | Recharger l'état courant, fusionner les modifications, puis renvoyer la requête. |
410 |
Disparu Gone |
La ressource a été supprimée volontairement et ne reviendra pas. C'est une 404 assumée et documentée. | À utiliser pour tout contenu retiré définitivement : les moteurs le désindexent plus vite qu'avec une 404. |
411 |
Longueur requise Length Required |
Le serveur exige un en-tête Content-Length et refuse les corps de taille inconnue. |
Ajouter l'en-tête, ou renoncer à l'envoi en flux (chunked) vers ce serveur. |
412 |
Précondition échouée Precondition Failed |
Une condition posée par le client via If-Match ou If-Unmodified-Since n'est plus remplie : la ressource a changé entre-temps. |
Récupérer l'ETag à jour puis rejouer la modification. |
413 |
Contenu trop volumineux Content Too Large |
Le corps de la requête dépasse la limite du serveur. Valeurs par défaut fréquentes : 1 Mo pour Nginx (client_max_body_size), 2 Mo pour un envoi de fichier PHP (upload_max_filesize). |
Compresser ou découper le fichier, ou relever la limite côté serveur. Ancien nom : Payload Too Large. |
414 |
URI trop longue URI Too Long |
L'adresse dépasse la taille admise, environ 8 190 octets par défaut sur Apache (LimitRequestLine). Signe habituel d'un formulaire envoyé en GET. |
Basculer la requête en POST ou réduire le nombre de paramètres transmis dans l'URL. |
415 |
Type de média non supporté Unsupported Media Type |
Le Content-Type envoyé n'est pas accepté : un formulaire classique adressé à une API qui n'attend que du JSON, par exemple. |
Corriger l'en-tête Content-Type et vérifier que le corps est réellement dans ce format. |
416 |
Plage non satisfaisable Range Not Satisfiable |
La plage d'octets demandée dépasse la taille réelle du fichier. | Relancer le téléchargement depuis le début : le fichier a probablement changé entre deux tentatives. |
417 |
Attente non satisfaite Expectation Failed |
Le serveur ne peut pas honorer l'en-tête Expect envoyé par le client. |
Désactiver l'attente : avec curl, ajouter -H "Expect:" à la commande. |
418 |
Je suis une théière I'm a teapot |
Non normalisé : poisson d'avril de la RFC 2324 (1998), étendu aux théières en 2014. Certains serveurs l'emploient pour éconduire les robots. | Rien à corriger. Si un service vous le renvoie, considérez-le comme un refus volontaire. |
421 |
Requête mal dirigée Misdirected Request |
Le serveur qui reçoit la requête n'est pas responsable de ce nom de domaine. Cas classique en HTTP/2, quand plusieurs domaines partagent un certificat et une connexion réutilisée. | Le client doit rouvrir une connexion neuve. Côté serveur, vérifier hôtes virtuels et certificats. |
422 |
Contenu non traitable Unprocessable Content |
La syntaxe est correcte mais le contenu est refusé : champ manquant, valeur hors bornes, règle métier violée. C'est le code des erreurs de validation. | Lire le corps de la réponse : les API y détaillent presque toujours les champs fautifs. |
423 |
Verrouillé Locked |
WebDAV : la ressource est verrouillée, en général par un autre utilisateur en train de l'éditer. | Attendre la libération du verrou ou en demander la levée. |
424 |
Dépendance échouée Failed Dependency |
WebDAV : l'action a été abandonnée parce qu'une action dont elle dépendait a échoué. | Corriger l'opération précédente : celle-ci n'a jamais été tentée. |
425 |
Trop tôt Too Early |
RFC 8470 : le serveur refuse de traiter une requête arrivée dans les données anticipées de TLS 1.3 (0-RTT), par crainte d'un rejeu malveillant. | Réémettre la requête une fois la connexion pleinement établie. Transparent pour le visiteur. |
426 |
Mise à niveau requise Upgrade Required |
Le serveur exige un autre protocole, en général une version de TLS plus récente. L'en-tête Upgrade précise laquelle. |
Mettre à jour le navigateur ou le client : un logiciel trop ancien ne pourra pas se connecter. |
428 |
Précondition requise Precondition Required |
Le serveur impose une requête conditionnelle pour éviter que deux modifications simultanées ne s'écrasent mutuellement. | Ajouter If-Match avec l'ETag obtenu lors de la lecture précédente. |
429 |
Trop de requêtes Too Many Requests |
Limitation de débit : trop d'appels depuis la même adresse IP, le même compte ou la même clé d'API sur une fenêtre de temps donnée. | Respecter Retry-After, espacer les tentatives, et vérifier si votre adresse est partagée avec d'autres abonnés. |
431 |
Champs d'en-tête trop volumineux Request Header Fields Too Large |
La taille cumulée des en-têtes dépasse la limite du serveur : dans la quasi-totalité des cas, une accumulation de cookies. | Supprimer les cookies du domaine. Côté serveur, ne pas stocker de jetons volumineux en cookie. |
451 |
Indisponible pour raisons légales Unavailable For Legal Reasons |
Accès refusé sur injonction juridique : décision de justice, censure, restriction réglementaire. Numéro choisi en clin d'œil à Fahrenheit 451. | Le corps de la réponse, ou un en-tête Link avec rel="blocked-by", doit désigner l'autorité à l'origine du blocage. |
444 |
Pas de réponse No Response |
Non normalisé, propre à Nginx : le serveur ferme la connexion sans rien envoyer, pour jeter silencieusement une requête jugée malveillante. Il n'apparaît que dans les journaux. | Rien côté client : le navigateur affiche une erreur réseau, pas une page d'erreur HTTP. |
494 |
En-têtes trop volumineux Request header too large |
Non normalisé, interne à Nginx. Le client reçoit en réalité un 400 ; seul le journal du serveur conserve le 494. | Réduire les cookies, ou augmenter large_client_header_buffers dans la configuration. |
495 |
Erreur de certificat client SSL Certificate Error |
Non normalisé, interne à Nginx : le certificat client présenté est invalide, expiré ou signé par une autorité non reconnue. | Vérifier la validité et la chaîne de signature du certificat installé sur le poste. |
496 |
Certificat client requis SSL Certificate Required |
Non normalisé, interne à Nginx : aucun certificat client n'a été fourni alors que le serveur l'exige. | Installer dans le navigateur ou le client le certificat délivré par l'administrateur. |
497 |
Requête HTTP sur un port HTTPS HTTP Request Sent to HTTPS Port |
Non normalisé, interne à Nginx : une requête en clair est arrivée sur un port destiné au trafic chiffré. | Corriger l'adresse en https://, ou la configuration du client qui appelle le service. |
499 |
Connexion fermée par le client Client Closed Request |
Non normalisé, propre à Nginx : le visiteur a quitté la page ou annulé avant l'arrivée de la réponse. Fréquent dans les journaux d'un site lent. | Ce n'est pas une panne mais un indicateur de lenteur : mesurer le temps de génération des pages concernées. |
500 |
Erreur interne du serveur Internal Server Error |
Erreur générique : le serveur a rencontré un problème qu'il ne sait pas qualifier. Sur un hébergement PHP, c'est le plus souvent une erreur fatale, une exception non traitée ou un .htaccess invalide. |
Ouvrir le journal d'erreurs du serveur : le code seul n'apprend rigoureusement rien. |
501 |
Non implémenté Not Implemented |
Le serveur ne sait pas traiter la méthode demandée. Seules GET et HEAD sont obligatoires pour un serveur conforme. | Vérifier le verbe HTTP employé, puis la documentation du service. |
502 |
Mauvaise passerelle Bad Gateway |
Un intermédiaire (reverse proxy, CDN) a reçu de l'application une réponse invalide ou une connexion coupée. Classique quand le processus PHP-FPM s'est arrêté. | Redémarrer le service applicatif et lire ses journaux. Côté visiteur, réessayer quelques minutes plus tard. |
503 |
Service indisponible Service Unavailable |
Le serveur est joignable mais refuse temporairement de servir : maintenance, surcharge, file d'attente pleine, ou protection anti-robots. | Attendre, en respectant Retry-After s'il est présent. Sur son site, surveiller la saturation des processus. |
504 |
Délai de la passerelle dépassé Gateway Timeout |
L'intermédiaire a joint l'application mais n'a pas reçu de réponse complète dans le temps imparti : 60 secondes par défaut avec Nginx. | Chercher la lenteur : requête SQL sans index, appel à une API externe qui ne répond pas, tâche trop longue. |
505 |
Version HTTP non supportée HTTP Version Not Supported |
Le serveur refuse la version du protocole employée par le client. | Très rare : signe d'un client artisanal ou d'un intermédiaire mal configuré. |
506 |
La variante négocie aussi Variant Also Negotiates |
Erreur de configuration de la négociation de contenu transparente (RFC 2295) : une variante renvoie elle-même vers une négociation. | Corriger la configuration du serveur : le client n'y est pour rien. |
507 |
Espace de stockage insuffisant Insufficient Storage |
WebDAV : le serveur n'a plus la place d'enregistrer la ressource envoyée. | Libérer de l'espace disque ou relever le quota du compte. |
508 |
Boucle détectée Loop Detected |
WebDAV (RFC 5842) : le traitement tourne en rond dans une arborescence comportant des liens circulaires. | Supprimer la référence circulaire dans la hiérarchie des ressources. |
510 |
Extension non satisfaite Not Extended |
Issue d'une extension expérimentale de HTTP (RFC 2774) aujourd'hui considérée comme obsolète. | Aucune action courante : vous ne devriez pas la rencontrer. |
511 |
Authentification réseau requise Network Authentication Required |
Ce n'est pas le site qui répond mais le réseau : portail captif d'un hôtel, d'un aéroport, d'un train ou d'un café. | Ouvrir une page non chiffrée pour faire apparaître le portail. Rester prudent sur ces réseaux partagés. |
520 |
Erreur inconnue de l'origine Web Server Returned an Unknown Error |
Non normalisé, propre à Cloudflare : le serveur d'origine a renvoyé une réponse vide, incomplète ou incompréhensible. C'est le code fourre-tout du service. | Comparer avec un accès direct à l'origine, puis lire les journaux du serveur : pas ceux du CDN. |
521 |
Serveur d'origine hors service Web Server Is Down |
Non normalisé (Cloudflare) : l'origine a refusé la connexion. Souvent un pare-feu qui bloque les plages d'adresses du réseau de diffusion. | Vérifier que le service écoute bien, et autoriser les adresses publiées par le CDN. |
522 |
Délai de connexion dépassé Connection Timed Out |
Non normalisé (Cloudflare) : la poignée de main TCP avec l'origine n'a jamais abouti. | Contrôler le pare-feu, la charge du serveur et le routage entre le CDN et l'origine. |
523 |
Origine inaccessible Origin Is Unreachable |
Non normalisé (Cloudflare) : aucune route vers l'origine, souvent à cause d'un enregistrement DNS pointant vers une adresse obsolète. | Vérifier l'enregistrement A ou AAAA de l'origine et sa propagation. |
524 |
Délai d'attente dépassé A Timeout Occurred |
Non normalisé (Cloudflare) : la connexion a été établie, mais l'origine n'a pas terminé sa réponse dans le délai du proxy, fixé à 100 secondes. | Déplacer les traitements longs vers une tâche asynchrone et répondre immédiatement au client. |
525 |
Échec de la négociation TLS SSL Handshake Failed |
Non normalisé (Cloudflare) : la négociation TLS entre le CDN et l'origine a échoué, protocoles ou suites de chiffrement incompatibles. | Vérifier le certificat de l'origine et les versions de TLS qu'elle accepte. |
526 |
Certificat TLS invalide Invalid SSL Certificate |
Non normalisé (Cloudflare) : en mode de validation stricte, le certificat de l'origine est expiré, auto-signé ou ne correspond pas au domaine. | Renouveler le certificat de l'origine ou ajuster le mode de chiffrement du CDN. |
527 |
Erreur Railgun Railgun Error |
Non normalisé et historique : il concernait un service d'accélération de Cloudflare depuis retiré. | Aucune : ce code ne devrait plus apparaître. |
Aucun code ne correspond à votre recherche.
Les codes qui ne sont pas dans la norme
Une partie des codes que l'on rencontre au quotidien n'existe dans aucune RFC. Nginx en a créé une série dans la plage 4xx pour ses propres besoins : le 444 ferme la connexion sans rien répondre, ce qui permet de jeter un robot sans lui offrir la moindre information, et le 499 signale simplement que le visiteur est parti avant la réponse. Ces valeurs ne circulent pas sur le réseau : elles ne servent qu'à remplir les journaux. Un pic de 499 sur un site n'indique donc pas une attaque, mais des pages trop lentes que les visiteurs abandonnent.
Cloudflare, de son côté, occupe la plage 520 à 527 pour décrire ses propres difficultés à joindre le serveur d'origine. La distinction est capitale pour le diagnostic : un 522 ou un 523 signifie que le CDN n'a jamais réussi à parler à votre serveur, alors qu'un 502 ou un 504 classique signifie qu'il lui a parlé sans obtenir de réponse exploitable. Le même service ajoute aussi des numéros d'erreur internes affichés dans le corps de la page (le 1015 pour une limitation de débit, le 1020 pour un refus décidé par une règle de filtrage) qui n'ont rien à voir avec le code HTTP transporté. Si l'un d'eux s'affiche systématiquement chez vous, notre guide mon IP est bloquée détaille la marche à suivre.
301 ou 302 : l'erreur qui coûte cher
Le choix entre redirection permanente et redirection temporaire paraît anodin. Il ne l'est pas, pour une raison technique : une réponse 301 est mise en cache par le navigateur, parfois durablement et sans que l'utilisateur puisse le deviner. Concrètement, si vous publiez par erreur une 301 de votre page d'accueil vers une adresse fautive, corriger le serveur ne suffira pas : les visiteurs qui ont déjà reçu la redirection continueront d'être renvoyés au mauvais endroit tant qu'ils n'auront pas vidé leur cache. Vous n'avez aucun moyen de le faire à leur place.
Deux précautions permettent d'éviter le piège. La première consiste à tester une nouvelle redirection en 302 pendant quelques jours, puis à la basculer en 301 une fois la cible confirmée. La seconde consiste à accompagner la 301 d'un en-tête Cache-Control avec une durée maîtrisée : la redirection reste permanente pour les moteurs, mais sa mémorisation par le navigateur est bornée.
Côté référencement, la distinction est tout aussi nette. Une 301 indique aux moteurs que l'ancienne adresse doit disparaître de l'index au profit de la nouvelle ; une 302 leur dit au contraire de conserver l'ancienne. Google indique traiter comme permanentes les redirections temporaires qui durent, mais le délai n'est ni documenté ni maîtrisable : mieux vaut envoyer le bon signal dès le départ.
Reste un piège plus discret. Historiquement, tous les navigateurs transforment un POST en GET lorsqu'ils suivent une 301 ou une 302, en contradiction avec le texte d'origine du protocole. Le corps de la requête est perdu au passage. Les codes 307 et 308 ont été créés précisément pour cela : ils garantissent que la méthode et le corps sont conservés. Le tableau ci-dessous résume le choix.
| Déplacement définitif, page consultée en GET | 301 : le cas le plus courant : changement de domaine, passage en HTTPS, refonte d'URL. |
|---|---|
| Déplacement définitif, URL recevant des POST | 308 : conserve méthode et corps : indispensable pour une API ou un point d'envoi de formulaire. |
| Détour temporaire, méthode à préserver | 307 : maintenance, bascule vers un serveur de secours, test A/B côté serveur. |
| Après une soumission de formulaire | 303 : force un GET vers la page de confirmation et empêche le renvoi des données au rechargement. |
| Détour temporaire sans contrainte | 302 : acceptable, mais 307 est plus explicite et plus sûr. |
Astuce : limitez-vous à un seul saut. Chaque redirection supplémentaire ajoute un aller-retour réseau complet, résolution DNS comprise si le domaine change ; sur une connexion mobile, une chaîne de trois redirections se paie en centaines de millisecondes. Le fonctionnement de cette résolution est détaillé dans notre guide du DNS.
403 contre 404 : ce que le serveur dit vraiment
Trois codes servent à refuser l'accès, et ils ne disent pas la même chose. Le 401 signifie « je ne sais pas qui vous êtes » : la réponse doit contenir un en-tête WWW-Authenticate et une authentification valide règle le problème. Le 403 signifie « je sais qui vous êtes, ou cela m'est égal, et c'est non » : recommencer avec les mêmes identifiants ne changera rien. Le 404 signifie « je n'ai rien à cette adresse », sans préciser si la ressource a existé.
Sur un serveur que vous administrez, un 403 alors que le fichier existe vient presque toujours de l'une de ces cinq causes : des droits insuffisants sur le fichier ou l'un de ses dossiers parents, l'absence de page d'index dans un répertoire dont le listing est désactivé, une règle de refus dans un .htaccess, une protection anti-copie de liens directs, ou un pare-feu applicatif qui a jugé la requête suspecte. Les quatre premières se corrigent en quelques secondes ; la dernière demande de lire les journaux, car aucune trace n'en apparaît côté visiteur.
En tant que visiteur, un 403 sur un site public a d'autres explications : filtrage géographique, blocage d'une plage d'adresses d'hébergeur, réputation dégradée de votre IP. Les sorties de VPN et les nœuds de sortie Tor sont particulièrement concernés, ce que détaillent nos guides sur les VPN et sur le réseau Tor. Un test simple consiste à recharger la page depuis un autre réseau, par exemple le partage de connexion d'un téléphone : si le site s'ouvre, le refus visait votre adresse et non votre requête.
Reste une pratique déroutante : de nombreux services renvoient délibérément un 404 là où un 403 serait techniquement exact. La logique est défensive. Répondre « interdit » confirme que la ressource existe, ce qui constitue déjà une fuite d'information : on apprend qu'un dossier privé, un identifiant de compte ou un espace d'administration se trouve à cette adresse. Répondre « introuvable » ne révèle rien. C'est pour cette raison qu'un dépôt privé sur une plateforme de code apparaît généralement comme inexistant tant que vous n'y avez pas accès. Si vous administrez un site, appliquez le même principe aux zones sensibles ; en revanche, préférez un 410 explicite pour un contenu que vous avez volontairement supprimé, car il accélère la désindexation.
429 et 503 : quand c'est votre IP qui est en cause
Le 429 est le code de la limitation de débit. Un serveur compte les requêtes reçues sur une fenêtre de temps et refuse au-delà d'un seuil. La question décisive est : sur quoi porte ce compteur ? S'il est associé à un compte utilisateur ou à une clé d'API, la responsabilité est directe. Mais dans la majorité des cas, la clé de comptage est tout simplement l'adresse IP publique, et vous n'êtes pas forcément seul derrière la vôtre.
C'est là que la mécanique se retourne contre des utilisateurs parfaitement innocents. Chez la plupart des opérateurs mobiles français, et chez plusieurs fournisseurs d'accès fixe, une même adresse IPv4 publique est partagée entre de nombreux abonnés par le mécanisme de CGNAT. Le site que vous consultez voit alors le trafic cumulé de tout ce groupe. Si l'un d'eux se comporte mal, ou si vous êtes simplement nombreux à consulter le même service au même moment, le compteur explose et le 429 tombe sur tout le monde. Le même effet se produit derrière un VPN : des milliers d'abonnés sortent par une poignée d'adresses, que les services de sécurité identifient sans peine comme appartenant à un hébergeur.
Le 503 joue parfois le même rôle. Certaines protections anti-robots répondent 503 ou 403 avec une page de vérification intermédiaire plutôt qu'un franc 429 : du point de vue du visiteur, cela se traduit par des captchas à répétition ou une attente de quelques secondes à chaque page. Ce n'est pas une panne, c'est une mise à l'épreuve.
- Cessez de recharger Chaque tentative alimente le compteur et prolonge la pénalité. Si l'en-tête
Retry-Afterest présent, il donne le délai exact, en secondes ou sous forme de date. - Identifiez votre adresse de sortie Notre outil de recherche d'adresse IP vous indique l'opérateur et le numéro AS associés. Un nom d'hébergeur plutôt qu'un fournisseur d'accès grand public explique à lui seul la plupart des blocages.
- Testez sans intermédiaire Désactivez temporairement VPN et proxy, ou passez par un autre réseau. Si le blocage disparaît, il visait l'adresse partagée et non vous.
- Vérifiez si votre adresse est fixe Sans CGNAT, un redémarrage de la box suffit parfois à obtenir une nouvelle adresse dynamique. Derrière un CGNAT, cela ne change rien : l'adresse publique n'est pas la vôtre.
- Contrôlez votre réputation Une adresse peut figurer sur une liste de blocage à la suite d'un appareil infecté sur votre réseau. La démarche complète est décrite dans mon IP est bloquée.
451 : le code créé pour la censure
Le code 451 est le seul de la liste dont le numéro a été choisi pour sa valeur symbolique. Normalisé par la RFC 7725 en février 2016, il signale qu'une ressource est inaccessible non pour une raison technique, mais parce qu'une autorité l'exige : décision de justice, injonction administrative, restriction réglementaire. Son numéro renvoie à Fahrenheit 451, le roman de Ray Bradbury publié en 1953, dont le titre désigne la température à laquelle le papier s'enflamme.
La RFC ne se contente pas d'attribuer un numéro. Elle recommande que la réponse identifie l'entité à l'origine du blocage, au moyen d'un en-tête Link portant la relation blocked-by, et qu'elle explique dans son corps qui est visé : l'auteur du site, le lecteur, ou les deux. L'objectif affiché est la transparence : rendre la censure mesurable par des outils automatisés plutôt que de la laisser se confondre avec une panne.
Dans la réalité, ce code reste peu employé. En France, les blocages ordonnés par la justice ou demandés par les autorités administratives sont le plus souvent mis en œuvre au niveau du DNS par les fournisseurs d'accès : le nom de domaine ne résout plus, ou renvoie vers une page d'information de l'opérateur. Le visiteur ne voit alors aucun code 451, mais une erreur de résolution que rien ne distingue d'une panne : d'où l'intérêt de comprendre ce que fait réellement un résolveur, sujet traité dans notre guide du DNS. L'usage le plus visible du 451 sur le web vient d'ailleurs : plusieurs sites d'information américains l'ont adopté pour refuser l'accès aux visiteurs européens plutôt que de se conformer au RGPD, un point que nous détaillons dans notre page sur l'adresse IP et le RGPD.
502, 503, 504 : proxy ou serveur ?
Ces trois codes se ressemblent à l'écran et désignent pourtant des pannes situées à des endroits différents. La clé est de comprendre qu'un site moderne empile plusieurs couches : le CDN reçoit la requête, la transmet à un serveur web, qui la transmet lui-même à un processus applicatif, qui interroge éventuellement une base de données. Chaque couche peut répondre à la place de la suivante.
Un 502 veut dire : « j'ai transmis votre requête, et ce que j'ai reçu en retour est inexploitable ». La couche suivante a coupé la connexion, planté, ou renvoyé des en-têtes malformés. Un 504 veut dire : « j'ai transmis votre requête, la connexion s'est bien établie, mais rien n'est revenu à temps ». Un 503 veut dire : « c'est moi qui refuse, je suis là mais indisponible », maintenance déclarée, file d'attente saturée, ou aucune destination valide dans un répartiteur de charge.
- Regardez qui répond L'en-tête
Serveret l'allure de la page d'erreur trahissent l'émetteur. Une page aux couleurs d'un CDN signifie que la requête n'a jamais atteint votre serveur ; une page brute de Nginx ou d'Apache signifie l'inverse. - Chronométrez l'erreur Une erreur immédiate évoque une connexion refusée ou un processus mort, donc un 502. Une erreur au bout d'une minute environ évoque un dépassement de délai ; autour de cent secondes, le proxy du CDN est en cause.
- Vérifiez la résolution du nom Un enregistrement pointant vers une ancienne adresse produit des symptômes trompeurs. Les types d'entrées concernés sont expliqués dans notre page sur les enregistrements DNS.
- Interrogez l'origine directement En contournant le CDN, vous saurez immédiatement si le serveur applicatif répond. S'il répond correctement, le problème est dans la couche intermédiaire.
- Mesurez le chemin réseau Une perte de paquets ou un routage anormal entre vous et le serveur se voit avec les commandes décrites dans notre guide ping et traceroute.
Attention : un 503 qui persiste sur un seul site alors que tout le reste fonctionne mérite d'être vérifié depuis un autre réseau. Un blocage ciblé sur votre adresse peut prendre l'apparence d'une indisponibilité générale, et vous chercherez longtemps une panne qui n'existe pas.
Voir les codes vous-même
Un code de statut ne s'affiche jamais spontanément : le navigateur montre la page, pas le nombre. Deux méthodes suffisent à le révéler.
La première est en ligne de commande. L'outil curl est installé d'origine sur macOS, sur les distributions Linux courantes et sur Windows 10 et 11, où il s'invoque sous le nom curl.exe pour ne pas être confondu avec l'alias PowerShell.
curl -I https://mon-adresse-ip.net/ # Envoie une requête HEAD et n'affiche que les en-têtes de réponse. curl -sS -o /dev/null -D - https://mon-adresse-ip.net/ # Vraie requête GET : le corps est jeté, les en-têtes restent affichés. # Utile car certains serveurs traitent HEAD différemment de GET. curl -sIL -w "%{http_code} %{url_effective}\n" -o /dev/null https://exemple.fr/ # Suit toute la chaîne de redirections et affiche le code final. curl -o /dev/null -s -w "%{http_code} en %{time_total}s\n" https://exemple.fr/ # Code de statut et durée totale : idéal pour repérer un 504 qui arrive # systématiquement au bout de 60 secondes.
La seconde méthode se passe d'installation. Ouvrez les outils de développement du navigateur avec la touche F12, placez-vous dans l'onglet Réseau, puis rechargez la page : chaque ressource apparaît avec son code dans une colonne dédiée. Trois réflexes rendent la lecture fiable. Cochez « Désactiver le cache », faute de quoi vous verrez surtout des 304 et des mentions « from disk cache » qui affichent 200 sans que le serveur ait été sollicité. Activez la conservation du journal si vous analysez une redirection, sinon la première ligne disparaît au chargement de la seconde page. Enfin, souvenez-vous qu'une redirection produit toujours deux lignes : le 301 ou 302 d'abord, la réponse finale ensuite.
Pour compléter le tableau, notre outil mes en-têtes HTTP vous montre l'autre versant de l'échange : la liste exacte des en-têtes que votre navigateur transmet à chaque site, dont plusieurs contribuent à votre empreinte de navigateur. Et si un terme croisé dans ces en-têtes vous échappe, le glossaire du réseau le définit en une phrase.
Questions fréquentes
Un code 200 signifie-t-il que la page est correcte ?
Non. Le 200 dit seulement que le serveur a répondu et qu'il considère avoir livré la ressource demandée. Un site mal configuré peut très bien renvoyer un 200 accompagné d'une page « Cette page n'existe pas » : c'est ce qu'on appelle une soft 404. Les moteurs de recherche la détectent et la traitent moins bien qu'une vraie 404, car elle pollue leur index.
Les erreurs 404 nuisent-elles au référencement ?
Une 404 isolée sur une URL que personne ne visite n'a pas d'effet mesurable : c'est une réponse normale du protocole. Ce qui pénalise réellement, ce sont les liens internes cassés, les redirections en chaîne et les pages importantes devenues introuvables sans redirection. Pour un contenu supprimé volontairement, le code 410 est plus explicite et accélère la désindexation.
Pourquoi mon serveur renvoie-t-il 403 alors que le fichier existe bien ?
Les causes les plus fréquentes sont les droits du fichier ou du dossier, l'absence de page d'index dans un répertoire dont le listing est désactivé, une règle de blocage dans un .htaccess, ou un pare-feu applicatif qui juge la requête suspecte. Côté visiteur, un 403 peut aussi venir d'un filtrage géographique ou de la réputation de votre adresse IP : notre page mon IP est bloquée détaille les vérifications à faire.
Que faire si je reçois sans arrêt des erreurs 429 ?
Commencez par respecter l'en-tête Retry-After quand il est fourni et espacez vos tentatives au lieu de recharger en boucle, ce qui ne fait qu'allonger la pénalité. Vérifiez ensuite qui partage votre adresse : derrière un CGNAT, un VPN ou un réseau mobile, le compteur du site est alimenté par des centaines d'autres personnes. Un test rapide avec notre outil de recherche d'IP vous dira si vous sortez sur une adresse d'hébergeur.
Quelle est la différence concrète entre une erreur 502 et une erreur 504 ?
Dans les deux cas, c'est un intermédiaire qui répond, pas l'application. Un 502 signifie que la réponse reçue de l'application était invalide ou que la connexion a été coupée : le processus applicatif est probablement mort. Un 504 signifie que la connexion a bien été établie mais qu'aucune réponse complète n'est arrivée dans le temps imparti : le traitement est trop lent. Le délai avant l'erreur est un bon indice, un 504 arrivant typiquement au bout de 60 ou 100 secondes.
Le code 418 « Je suis une théière » existe-t-il vraiment ?
Il existe, mais il n'appartient pas à la norme HTTP. Il vient de la RFC 2324, un poisson d'avril publié le 1er avril 1998 qui décrivait un protocole de commande de cafetières, complété en 2014 par la RFC 7168 pour les théières. Certains serveurs s'en servent aujourd'hui comme refus poli à destination des robots. Si un service vous le renvoie, considérez-le comme un blocage volontaire.