Réseau

Liste des codes de statut HTTP

Liste complète des codes de statut HTTP (1xx-5xx) avec leur signification, les causes fréquentes et les solutions pour les développeurs. Inclut un outil de recherche — saisissez un numéro de code pour voir instantanément les détails.

Tableau de référence des codes de statut HTTP
Code Nom Signification Causes fréquentes
1xx — Information
100 Continue (Continue) Indique que le serveur a reçu le début de la requête et que le client doit continuer à envoyer le reste. Renvoyé lorsqu'un client envoie un en-tête Expect: 100-continue avant un corps de requête volumineux.
101 Switching Protocols (Switching Protocols) Indique que le serveur accepte la demande de l'en-tête Upgrade et bascule vers un autre protocole. Une réponse normale observée lors de l'établissement d'une connexion WebSocket.
102 Processing (Processing) Indique que le serveur a accepté la requête et qu'il est toujours en train de la traiter, sans réponse prête pour l'instant (WebDAV). Envoyé pour éviter les délais d'attente lors d'opérations WebDAV de longue durée.
103 Early Hints (Early Hints) Envoie des en-têtes préliminaires comme Link avant la réponse finale, permettant au navigateur de précharger des ressources. Ajouté par des CDN ou des proxys inverses pour accélérer le préchargement du CSS/JS.
2xx — Succès
200 OK (OK) La réponse de succès la plus courante, indiquant que la requête a été traitée avec succès.
201 Created (Created) Indique qu'une nouvelle ressource a été créée à la suite de la requête. Renvoyé par les API qui créent des ressources via POST ; inclut généralement un en-tête Location pointant vers la nouvelle ressource.
202 Accepted (Accepted) Indique que la requête a été acceptée mais que le traitement n'est pas encore terminé (traitement asynchrone). Utilisé par les API asynchrones qui se contentent de mettre le travail en file d'attente, ou par des points de terminaison de traitement par lot.
204 No Content (No Content) Indique que la requête a réussi mais qu'il n'y a aucun contenu à renvoyer. Courant après un DELETE réussi, ou une mise à jour PUT dont la conception de l'API omet le corps de réponse.
206 Partial Content (Partial Content) Indique que seule une partie de la ressource a été renvoyée, en fonction de l'en-tête Range du client. Une réponse normale pour le seek vidéo ou les téléchargements reprenables.
3xx — Redirection
301 Moved Permanently (Moved Permanently) Indique que la ressource a été déplacée de façon permanente vers une nouvelle URL ; les moteurs de recherche transfèrent les signaux de classement vers la nouvelle URL. Utilisé pour rediriger les anciennes URL après un changement de structure d'URL ou une migration de domaine.
302 Found (Found) Indique que la ressource se trouve temporairement à une autre URL. Les déplacements permanents doivent plutôt utiliser 301. Couramment utilisé pour un routage temporaire pendant une maintenance, ou pour des redirections après connexion.
303 See Other (See Other) Indique que le résultat doit être récupéré avec GET depuis une autre URL (le modèle Post-Redirect-Get). Utilisé après la soumission d'un formulaire (POST) pour éviter la boîte de dialogue de renvoi du navigateur.
304 Not Modified (Not Modified) Indique que la ressource mise en cache n'a pas changé, de sorte que le corps n'est pas renvoyé. Renvoyé pour les requêtes conditionnelles utilisant If-None-Match / If-Modified-Since lorsque le cache est encore valide.
307 Temporary Redirect (Temporary Redirect) Une redirection temporaire qui, contrairement à 302, conserve la méthode et le corps d'origine lors du renvoi. Utilisé dans les conceptions d'API qui doivent rediriger des requêtes POST/PUT tout en conservant le corps.
308 Permanent Redirect (Permanent Redirect) Une redirection permanente qui, contrairement à 301, conserve la méthode et le corps d'origine lors du renvoi. Utilisé pour les migrations de version d'API nécessitant un déplacement permanent tout en conservant la méthode.
4xx — Erreur client
400 Bad Request (Bad Request) Indique que la syntaxe ou les paramètres de la requête sont mal formés et que le serveur ne peut pas la comprendre. Généralement causé par des erreurs de syntaxe JSON, des paramètres requis manquants ou des incompatibilités de type.
401 Unauthorized (Unauthorized) Indique des identifiants d'authentification manquants ou invalides (malgré son nom, cela signifie en réalité "non authentifié"). Souvent causé par un jeton expiré, un en-tête Authorization manquant ou une clé API incorrecte.
402 Payment Required (Payment Required) Réservé pour un usage futur ; parfois utilisé pour indiquer qu'un paiement est requis. Certaines API le détournent pour signaler un dépassement de limite d'utilisation ou un plan de facturation expiré.
403 Forbidden (Forbidden) Indique que le serveur a compris la requête mais refuse de l'autoriser. Les causes typiques incluent des permissions insuffisantes, des restrictions IP, des violations de la politique CORS ou des erreurs de configuration des permissions de fichiers.
404 Not Found (Not Found) Indique que la ressource demandée est introuvable. Généralement causé par une route non enregistrée, une faute de frappe dans l'URL, ou l'accès à une ressource déjà supprimée.
405 Method Not Allowed (Method Not Allowed) Indique que la ressource existe mais que la méthode HTTP spécifiée n'y est pas autorisée. Se produit typiquement lorsqu'un POST est envoyé à un point de terminaison réservé au GET, ou lors d'une incompatibilité de méthode similaire.
406 Not Acceptable (Not Acceptable) Indique que le serveur ne peut pas produire de réponse correspondant à l'en-tête Accept du client. Se produit par exemple lorsqu'un client demande Accept: application/xml à une API qui ne renvoie que du JSON.
408 Request Timeout (Request Timeout) Indique que le serveur a dépassé le délai d'attente pour que le client termine la requête. Souvent causé par des connexions lentes, des téléversements volumineux, ou un client qui se bloque en cours de requête.
409 Conflict (Conflict) Indique que la requête est en conflit avec l'état actuel de la ressource. Se produit en cas d'échecs de verrouillage optimiste lors de modifications concurrentes, ou de tentatives de création de doublons.
410 Gone (Gone) Indique que la ressource a été définitivement supprimée et ne reviendra pas (un signal plus fort que 404). Utilisé pour indiquer explicitement aux moteurs de recherche qu'un contenu a été intentionnellement supprimé et retiré.
413 Payload Too Large (Payload Too Large) Indique que le corps de la requête dépasse la taille que le serveur est prêt à accepter. Généralement causé par le dépassement d'une limite de taille de téléversement de fichier, ou par un réglage de taille de corps insuffisant dans Nginx/PHP.
414 URI Too Long (URI Too Long) Indique que l'URI de la requête est plus longue que ce que le serveur est prêt à traiter. Se produit souvent lorsqu'une grande quantité de données est intégrée dans des paramètres de requête GET.
415 Unsupported Media Type (Unsupported Media Type) Indique que le serveur ne prend pas en charge le type de média du corps de la requête. Courant lors de l'envoi de Content-Type: text/plain à une API JSON, ou lors d'erreurs de configuration d'en-tête similaires.
422 Unprocessable Entity (Unprocessable Entity) Indique que la syntaxe de la requête est valide mais que la validation sémantique a échoué. Fréquemment utilisé pour signaler des erreurs de validation de formulaire, comme des champs requis manquants ou des formats invalides.
425 Too Early (Too Early) Indique que le serveur refuse de traiter une requête qui pourrait être rejouée en raison du risque lié aux early data. Peut être renvoyé comme défense contre les attaques par rejeu utilisant les données 0-RTT de TLS 1.3.
429 Too Many Requests (Too Many Requests) Indique que le client a envoyé trop de requêtes dans une fenêtre de temps donnée (limitation de débit). Causé par le dépassement d'une limite de débit de l'API ; l'en-tête Retry-After indique souvent combien de temps attendre avant de réessayer.
451 Unavailable For Legal Reasons (Unavailable For Legal Reasons) Indique que le contenu est indisponible en raison d'une exigence légale, telle qu'une décision de justice. Renvoyé lorsqu'un fournisseur de contenu bloque l'accès en raison d'une réclamation pour violation de droit d'auteur ou d'une réglementation légale spécifique à un pays.
5xx — Erreur serveur
500 Internal Server Error (Internal Server Error) Indique qu'une erreur inattendue s'est produite sur le serveur et que la requête n'a pas pu être traitée. Les causes varient considérablement : exceptions non gérées dans l'application, erreurs de configuration, échecs de connexion à la base de données, et bien plus.
501 Not Implemented (Not Implemented) Indique que le serveur ne prend pas en charge la fonctionnalité requise pour satisfaire la requête. Se produit lorsqu'une méthode HTTP non implémentée (par exemple PATCH) est envoyée à une implémentation de serveur plus ancienne.
502 Bad Gateway (Bad Gateway) Indique qu'un proxy ou une passerelle a reçu une réponse invalide du serveur en amont. Généralement causé par le fait que le serveur d'application en amont est hors service ou a planté.
503 Service Unavailable (Service Unavailable) Indique que le serveur est temporairement surchargé ou en maintenance et ne peut pas traiter la requête. Principalement causé par un épuisement des ressources sous forte charge, ou une fenêtre de maintenance planifiée.
504 Gateway Timeout (Gateway Timeout) Indique qu'un proxy ou une passerelle n'a pas reçu de réponse à temps du serveur en amont. Souvent causé par un traitement backend de longue durée, une latence réseau, ou un serveur en amont qui se bloque.
505 HTTP Version Not Supported (HTTP Version Not Supported) Indique que le serveur ne prend pas en charge la version HTTP utilisée dans la requête. Se produit lorsqu'un ancien client ou un proxy mal configuré communique en utilisant une version HTTP inattendue.
507 Insufficient Storage (Insufficient Storage) Indique que le serveur ne dispose pas de suffisamment d'espace de stockage pour terminer la requête (WebDAV). Renvoyé lorsqu'une opération de stockage de fichier échoue en raison d'un espace disque insuffisant.
508 Loop Detected (Loop Detected) Indique que le serveur a détecté une boucle infinie lors du traitement de la requête (WebDAV). Se produit lorsqu'une configuration de liaison WebDAV contient une référence circulaire.
511 Network Authentication Required (Network Authentication Required) Indique que le client doit s'authentifier pour obtenir l'accès au réseau. Utilisé pour rediriger vers une page de connexion de portail captif, comme sur un Wi-Fi public.

Astuces

  • 404 et 410 se ressemblent, mais 410 signale explicitement qu'un contenu a été intentionnellement supprimé et ne reviendra pas. Utilisez 410 pour un contenu sans remplacement afin d'envoyer un signal plus clair aux moteurs de recherche.
  • 301 vs. 308 et 302 vs. 307 partagent la même distinction "permanent contre temporaire", mais 308 et 307 conservent le corps POST d'origine lors du renvoi, contrairement à 301 et 302.
  • Lorsque vous recevez un 429 Too Many Requests, vérifiez l'en-tête Retry-After et attendez ce délai avant de réessayer — insister malgré tout sur le point de terminaison peut vous faire bloquer complètement.
  • Une erreur 5xx signale un problème côté serveur, et non un bug dans votre requête — vérifiez les journaux serveur et l'état de disponibilité avant de déboguer votre code client.
  • L'onglet Réseau des outils de développement de votre navigateur attribue un code couleur aux codes de statut de chaque requête. Combiner cela avec cette référence rend le débogage beaucoup plus rapide.

FAQ

Les deux indiquent qu'une ressource est introuvable, mais 404 est un "introuvable" général qui peut être temporaire, tandis que 410 signale explicitement que la ressource a été définitivement supprimée et ne reviendra jamais. Utilisez 410 pour un contenu supprimé intentionnellement afin d'envoyer un signal SEO plus clair.

Une redirection 301 (permanente) transfère presque tous les signaux de classement de l'ancienne URL vers la nouvelle. Une redirection 302 (temporaire) indique aux moteurs de recherche de continuer à considérer l'ancienne URL comme canonique ; les déplacements permanents doivent donc toujours utiliser 301.

401 Unauthorized signifie en réalité "non authentifié" — le client n'a pas prouvé son identité. 403 Forbidden signifie que le client est authentifié mais ne dispose pas des permissions nécessaires. Malgré leurs noms, 401 concerne l'authentification et 403 concerne l'autorisation.

Un 502 signifie qu'un proxy inverse ou un équilibreur de charge a reçu une réponse invalide du serveur d'application backend. Commencez par vérifier si le processus du serveur d'application est en cours d'exécution et n'a pas planté.

Utilisez l'onglet Réseau des outils de développement de votre navigateur, l'option -i avec curl, ou saisissez le numéro de code dans l'outil de recherche de cette page pour en voir la signification.
ツールくん

Anecdote — Petite histoire des codes de statut HTTP

Le système des codes de statut HTTP a été normalisé pour la première fois dans la RFC 1945, la spécification HTTP/1.0 publiée en 1996. HTTP/1.1 (RFC 2616), sorti en 1999, a établi l'essentiel du système de codes que nous utilisons aujourd'hui, y compris les familles 4xx et 5xx, et il s'est perpétué depuis à travers la RFC 7231 (2014) et la RFC 9110 (2022).

Le célèbre code humoristique 418 I'm a teapot provient d'une RFC du 1er avril 1998 décrivant le fictif "Hyper Text Coffee Pot Control Protocol" (HTCPCP). Ce code devait être renvoyé si l'on demandait à une théière de préparer du café.

Le principe de conception selon lequel le chiffre en tête signale une catégorie large est réputé avoir influencé des systèmes de codes de retour ultérieurs dans des protocoles comme SMTP et FTP. La simplicité du "1xx = information, 2xx = succès" est restée pratiquement inchangée depuis près de trois décennies.

451 Unavailable For Legal Reasons est un ajout relativement récent, formellement normalisé dans la RFC 7725 en 2015. Le nombre 451 a été délibérément choisi en clin d'œil au roman dystopique de Ray Bradbury "Fahrenheit 451", centré sur la censure.