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.
| 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-Afteret 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
-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.