Quand une page web ne s’affiche pas, qu’un formulaire échoue ou qu’une API renvoie une erreur, les codes HTTP donnent souvent la première piste de diagnostic. Ils indiquent comment un serveur a traité une demande envoyée par un navigateur, une application ou un autre serveur.
Comprendre une requête HTTP ne demande pas de maîtriser toute l’architecture du Web. Il faut surtout savoir distinguer la demande du client, la réponse du serveur, les grandes familles de statuts et les informations utiles contenues dans les en-têtes.
Que se passe-t-il lorsqu’une adresse web est ouverte ?
Lorsqu’un internaute saisit une adresse dans son navigateur, celui-ci ne reçoit pas directement une page complète. Il commence par demander la ressource correspondant à cette adresse. Cette demande est transmise au serveur qui héberge le site, généralement après la résolution du nom de domaine en adresse IP et l’établissement d’une connexion sécurisée lorsque le site utilise HTTPS.
Le serveur analyse ensuite la requête. Il peut rechercher un fichier, exécuter du code côté serveur, interroger une base de données ou vérifier des droits d’accès. Il renvoie enfin une réponse composée d’un code de statut, d’en-têtes et, lorsque cela est nécessaire, d’un contenu comme du HTML, du JSON, une image ou un fichier.
Le navigateur interprète cette réponse. Pour une page HTML, il devra souvent effectuer d’autres requêtes afin de récupérer les feuilles de style, les scripts JavaScript, les polices et les images référencées dans le document.
La structure d’une requête HTTP

Une requête HTTP contient plusieurs informations qui permettent au serveur de comprendre ce que le client attend. Les éléments les plus importants sont la méthode, l’URL, les en-têtes et, dans certains cas, le corps de la requête.
La méthode décrit l’action demandée
La méthode HTTP indique l’intention principale de la requête. Les méthodes les plus courantes sont :
- GET : récupérer une ressource, par exemple une page HTML ou les données d’un produit ;
- POST : envoyer des données au serveur, notamment lors de la soumission d’un formulaire ;
- PUT : remplacer une ressource existante ou transmettre une représentation complète ;
- PATCH : modifier seulement une partie d’une ressource ;
- DELETE : demander la suppression d’une ressource.
Dans un site classique, un clic sur un lien déclenche généralement une requête GET. Une connexion, une recherche ou une commande peut en revanche envoyer des données avec POST, selon la conception de l’application.
L’URL identifie la ressource
L’URL précise le protocole, le domaine et le chemin demandé. Elle peut aussi contenir une chaîne de paramètres, souvent placée après un point d’interrogation. Une adresse comme /produits?categorie=livres demande par exemple une ressource avec un filtre transmis au serveur.
Les paramètres d’URL ne doivent pas être confondus avec les données envoyées dans le corps d’une requête. Leur emplacement dépend du besoin fonctionnel, du type de formulaire et de la conception de l’API.
Les en-têtes transportent des informations de contexte
Les en-têtes, appelés headers en anglais, donnent au serveur des indications complémentaires. Ils peuvent préciser le type de contenu accepté, la langue préférée, le navigateur utilisé ou les informations d’authentification.
La réponse possède également ses propres en-têtes. Content-Type indique par exemple si le serveur renvoie du HTML, du JSON ou une image. Cache-Control participe à la gestion de la mise en cache, tandis que Location indique souvent la destination d’une redirection.
Les cinq familles de codes HTTP
Les codes de statut sont des nombres à trois chiffres. Le premier chiffre permet d’identifier la nature générale de la réponse. Cette classification suffit déjà à orienter un diagnostic.
| Famille | Signification | Lecture pratique |
|---|---|---|
| 1xx | Information | La demande est en cours de traitement ou fournit une information intermédiaire. |
| 2xx | Succès | La demande a été acceptée ou traitée correctement. |
| 3xx | Redirection | Le client doit suivre une autre destination ou peut utiliser une version déjà connue. |
| 4xx | Erreur côté client | La requête est absente, incorrecte, interdite ou ne peut pas être traitée telle quelle. |
| 5xx | Erreur côté serveur | Le serveur n’a pas réussi à répondre correctement à une demande recevable. |
Cette distinction n’est pas absolue dans tous les scénarios. Une erreur 4xx peut être provoquée par une configuration serveur ou une règle de sécurité, et une erreur 5xx peut être déclenchée par une donnée envoyée par le client. Elle reste néanmoins très utile pour commencer l’analyse.
Les codes de statut à connaître en priorité
200, 201 et 204 : des réponses réussies
200 OK signifie que la requête a été traitée avec succès. C’est le statut habituel pour le chargement d’une page ou la récupération de données.
201 Created indique généralement qu’une nouvelle ressource a été créée après une requête, par exemple lorsqu’un formulaire ou une API enregistre un nouvel élément. 204 No Content confirme également le succès, mais sans contenu à afficher dans la réponse. Cette situation peut être adaptée à une suppression ou à une modification effectuée en arrière-plan.
301, 302, 307 et 308 : les redirections
Une redirection demande au client de consulter une autre URL. 301 et 308 sont généralement utilisés pour signaler qu’un déplacement est permanent, tandis que 302 et 307 correspondent habituellement à une redirection temporaire.
La différence entre certains codes concerne notamment la manière dont la méthode HTTP doit être conservée. Dans un site, une mauvaise redirection peut créer une chaîne inutile, rediriger vers une destination inattendue ou perturber un formulaire. Pour une migration d’URL, il faut donc vérifier la destination finale, le nombre d’étapes et le comportement des différentes pages concernées.
400, 401, 403 et 404 : les erreurs fréquentes côté client
400 Bad Request signifie que le serveur considère la requête comme incorrecte. Un paramètre mal formé, un JSON invalide ou une donnée qui ne respecte pas le format attendu peuvent en être la cause.
401 Unauthorized indique généralement qu’une authentification est nécessaire ou que les informations d’authentification transmises ne permettent pas d’accéder à la ressource. 403 Forbidden signifie que le serveur a compris la demande mais refuse l’accès. La différence entre les deux dépend de l’application et de sa politique de sécurité.
404 Not Found indique que la ressource demandée n’a pas été trouvée à cette adresse. Sur un site, ce code peut résulter d’une URL mal saisie, d’une page supprimée ou d’un lien obsolète. Il ne faut pas le corriger automatiquement par une redirection vers la page d’accueil : la destination de remplacement doit être réellement pertinente.
408, 409, 422 et 429 : des cas plus précis
408 Request Timeout indique que le serveur n’a pas reçu la requête complète dans le délai prévu. 409 Conflict signale un conflit avec l’état actuel d’une ressource, par exemple lors d’une modification incompatible avec une version plus récente.
422 Unprocessable Content est souvent utilisé lorsqu’un serveur comprend la structure de la demande mais ne peut pas traiter les données fournies, comme un formulaire dont certains champs ne respectent pas les règles métier. 429 Too Many Requests indique que le client a envoyé trop de demandes sur une période donnée. Une application bien conçue peut alors respecter un délai avant de réessayer.
500, 502, 503 et 504 : les erreurs côté serveur
500 Internal Server Error correspond à une erreur interne non détaillée dans la réponse publique. Il peut s’agir d’une exception dans le code, d’une mauvaise configuration ou d’un problème avec une dépendance.
502 Bad Gateway apparaît lorsqu’un serveur agissant comme passerelle reçoit une réponse invalide d’un autre service. 503 Service Unavailable indique que le service n’est pas disponible au moment de la demande, parfois en raison d’une maintenance ou d’une surcharge. 504 Gateway Timeout signale qu’un serveur intermédiaire n’a pas reçu à temps la réponse d’un service en amont.
Pour ces erreurs, multiplier les rechargements n’est pas toujours utile. Il faut consulter les journaux du serveur, vérifier les services dépendants et regarder si le problème est reproductible ou limité à une période précise.
Comment diagnostiquer une erreur HTTP dans le navigateur
Les outils de développement intégrés aux navigateurs permettent d’observer les échanges sans modifier le code au hasard. Dans l’onglet réseau, rechargez la page puis repérez la requête qui échoue. Plusieurs colonnes et panneaux sont particulièrement utiles :
- le statut, pour identifier la famille de réponse ;
- l’URL et la méthode, pour vérifier que la bonne ressource est appelée ;
- les en-têtes de requête et de réponse, pour repérer un type de contenu ou une authentification incorrecte ;
- l’onglet de réponse, pour lire le message renvoyé par le serveur ;
- la durée et la chronologie, afin de distinguer une erreur immédiate d’un délai d’attente.
Pour une API, comparez ensuite la requête réellement envoyée avec le format attendu : nom des champs, type de contenu, méthode, paramètres et droits d’accès. Une réponse 200 ne garantit pas toujours que l’opération métier a réussi : il faut également vérifier le contenu renvoyé.
Les erreurs d’interprétation à éviter
Un code HTTP décrit la réponse à une requête précise. Il ne résume donc pas nécessairement la santé globale d’un site. Une page peut répondre en 200 tout en affichant une erreur côté JavaScript, et un site peut fonctionner pour la majorité des visiteurs alors qu’une ressource particulière renvoie 404.
Évitez également d’exposer en production des messages techniques trop détaillés dans une réponse 5xx. Ils peuvent aider au développement, mais révéler des chemins de fichiers, des informations de configuration ou des détails internes. Les utilisateurs doivent recevoir un message compréhensible, tandis que les informations de diagnostic doivent rester dans des journaux protégés.
Enfin, ne choisissez pas un code uniquement parce qu’il fait disparaître une alerte dans le navigateur. Un statut adapté facilite le débogage, la gestion des caches, le comportement des clients et l’exploitation des journaux.
Le réflexe à adopter face à un code inattendu
Commencez par reproduire le problème avec la même URL et la même méthode, puis notez le statut, le moment d’apparition et les paramètres concernés. Vérifiez ensuite si l’erreur touche tous les utilisateurs, une seule page, un compte particulier ou un service externe.
Pour un 4xx, examinez d’abord la requête, les permissions et les données transmises. Pour un 5xx, cherchez plutôt du côté du code serveur, de la configuration, de la base de données ou d’un service intermédiaire. Cette séparation ne donne pas immédiatement la solution, mais elle évite de chercher au mauvais endroit.
Une fois la correction appliquée, testez aussi les cas voisins : URL inexistante, utilisateur non authentifié, formulaire invalide, ressource supprimée et service temporairement indisponible. Un système robuste ne se contente pas de réussir le scénario nominal ; il répond de manière prévisible lorsque quelque chose se passe mal.