Codes de statut HTTP : la liste complète, expliquée et commentée

Par La rédaction de Mon-Adresse-IP.net·Publié le ·

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 : InformationRé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èsLa 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 : RedirectionUne 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 clientLe serveur estime que la requête est fautive : adresse erronée, droits manquants, format refusé, débit excessif.
5xx : Erreur du serveurLa 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.

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 GET301 : le cas le plus courant : changement de domaine, passage en HTTPS, refonte d'URL.
Déplacement définitif, URL recevant des POST308 : conserve méthode et corps : indispensable pour une API ou un point d'envoi de formulaire.
Détour temporaire, méthode à préserver307 : maintenance, bascule vers un serveur de secours, test A/B côté serveur.
Après une soumission de formulaire303 : force un GET vers la page de confirmation et empêche le renvoi des données au rechargement.
Détour temporaire sans contrainte302 : 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.

  1. Cessez de recharger Chaque tentative alimente le compteur et prolonge la pénalité. Si l'en-tête Retry-After est présent, il donne le délai exact, en secondes ou sous forme de date.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

  1. Regardez qui répond L'en-tête Server et 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.