15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer
10.10.2024

Qu’est-ce qu’une erreur 400 Bad Request et comment la corriger ?

Une erreur 400 Bad Request est un code de statut d’erreur client HTTP/1.1 défini dans la RFC 9110 qui signale que le serveur a reçu une requête qu’il ne peut pas ou ne veut pas traiter car la requête elle-même est malformée. Contrairement aux erreurs 5xx, qui proviennent du côté serveur, une erreur 400 place la faute entièrement du côté client — ce qui signifie que le problème réside dans la requête envoyée, et non dans la capacité du serveur à répondre.

En pratique, une erreur 400 se déclenche avant même que le serveur tente de traiter la requête. Le serveur analyse le message HTTP entrant, détecte quelque chose de structurellement ou sémantiquement invalide — un en-tête corrompu, un URI malformé, une charge utile trop volumineuse, un cookie incorrect — et retourne immédiatement 400 Bad Request sans poursuivre. Connaître cette distinction est le moyen le plus rapide d’établir un diagnostic correct.

Ce que le code de statut 400 signifie réellement au niveau du protocole

HTTP fonctionne selon un contrat strict de requête-réponse. Chaque requête doit être conforme à la grammaire définie dans la spécification HTTP. Lorsqu’un client envoie un message qui viole cette grammaire, le serveur est à la fois autorisé et tenu de le rejeter avec une réponse 400.

Le serveur n’enregistre pas un 400 comme sa propre défaillance. Il l’enregistre comme une requête client rejetée. C’est pourquoi redémarrer aveuglément un serveur ou vider un cache CDN résout rarement un vrai 400 — la cause profonde se trouve presque toujours dans la construction de la requête.

Les variantes courantes de cette erreur affichées par les navigateurs incluent :

  • 400 Bad Request
  • HTTP Error 400
  • Bad Request — Invalid URL
  • 400. That's an error. Your client has issued a malformed or illegal request.
  • 400 Bad Request. The server cannot or will not process the request due to something that is perceived to be a client error.

Toutes ces variantes correspondent au même code de statut HTTP sous-jacent. La formulation diffère selon le logiciel serveur (Apache, Nginx, IIS, Cloudflare) et le framework applicatif.

Causes principales d’une erreur 400 Bad Request

Comprendre le déclencheur précis est essentiel avant de tenter une correction. Les causes se répartissent en deux catégories : côté client et mauvaise configuration côté serveur.

Causes côté client

URL malformée ou incorrectement encodée

Une URL contenant des espaces non encodés, des caractères illégaux ou des séquences de percent-encoding incorrectes sera immédiatement rejetée. La spécification HTTP exige que tous les caractères en dehors de l’ensemble non réservé (A–Z, a–z, 0–9, -, _, ., ~) soient encodés en pourcentage avant la transmission.

Cookies corrompus ou trop volumineux

Les cookies sont transmis dans l’en-tête de requête Cookie. Si la valeur d’un cookie est malformée, dépasse la limite de taille par cookie du navigateur (généralement 4096 octets), ou contient des caractères qui violent la RFC 6265, le serveur peut rejeter l’intégralité de la requête. C’est l’une des causes les plus fréquemment négligées des erreurs 400 intermittentes sur des sites qu’un utilisateur a précédemment visités sans problème.

En-têtes de requête invalides ou manquants

Certaines API et applications web appliquent une validation stricte des en-têtes. Un Content-Type manquant sur une requête POST, un en-tête Authorization malformé, ou un en-tête Accept avec un type de média non pris en charge peuvent tous déclencher une erreur 400.

Charge utile de requête trop volumineuse

Les serveurs web et les proxies inverses appliquent des limites de taille maximale du corps. Nginx utilise client_max_body_size (par défaut : 1 Mo) ; Apache utilise LimitRequestBody. Dépasser ces seuils produit une réponse 400 ou 413 selon la configuration.

Cache DNS obsolète ou incorrect

Bien que les échecs de résolution DNS produisent généralement des erreurs de connexion plutôt que des erreurs HTTP 400, un cache DNS empoisonné ou obsolète qui route une requête vers le mauvais serveur — un serveur qui ne reconnaît pas l’en-tête Host — peut entraîner le retour d’un 400 par le mauvais serveur d’origine.

Extensions de navigateur interférant avec les en-têtes de requête

Certains bloqueurs de publicités, outils de confidentialité et extensions de développement modifient les en-têtes HTTP sortants. Si une extension injecte un en-tête malformé ou dupliqué, le serveur peut rejeter la requête.

Causes côté serveur

Règles .htaccess mal configurées (Apache)

Les règles de réécriture, les directives de redirection ou les entrées de contrôle d’accès contenant des erreurs de syntaxe peuvent amener Apache à générer un 400 avant que la requête n’atteigne la couche applicative.

Erreurs de configuration Nginx

Des directives server_name invalides, des blocs location incorrects, ou des paramètres proxy_pass erronés peuvent amener Nginx à retourner un 400 pour des requêtes qu’il ne peut pas router.

Sur-blocage par WAF ou plugin de sécurité

Les pare-feux d’applications web — qu’ils soient au niveau du serveur (ModSecurity), au niveau CDN (Cloudflare WAF), ou au niveau applicatif (plugins de sécurité WordPress) — peuvent signaler des requêtes légitimes comme malveillantes et retourner un 400 ou 403. Cela est courant lorsque les paramètres de requête contiennent des chaînes correspondant à des signatures d’injection SQL ou XSS.

Échecs de validation au niveau applicatif

Les frameworks comme Laravel, Django ou Express.js retournent un 400 lorsque la validation des entrées échoue — par exemple, un champ JSON requis est absent, un champ de date est dans un mauvais format, ou un paramètre numérique reçoit une valeur de type chaîne.

Comment corriger une erreur 400 Bad Request : étapes côté client

1. Valider et corriger l’URL

Inspectez l’URL caractère par caractère. Portez une attention particulière à :

  • Espaces non encodés : Un espace doit être %20, et non un espace littéral ou + (en dehors des données de formulaire).
  • Doubles barres obliques ou barres obliques manquantes : https://example.com//path ou https://example.com/path? avec un point d’interrogation pendant.
  • Percent-encoding incorrect : Un % non suivi d’exactement deux chiffres hexadécimaux est illégal.
  • Caractères non-ASCII : Les noms de domaine avec des caractères Unicode doivent utiliser Punycode ; les segments de chemin avec Unicode doivent être encodés en pourcentage en UTF-8.

Une URL correctement encodée ressemble à ceci :

https://example.com/search?q=hello%20world&lang=en

Et non comme ceci :

https://example.com/search?q=hello world&lang=en

2. Vider les cookies et le cache du navigateur

Cela résout la majorité des erreurs 400 rencontrées sur des sites que l’utilisateur a précédemment visités.

Google Chrome :

  1. Ouvrir chrome://settings/clearBrowserData
  2. Définir la plage de temps sur Toute la période
  3. Cocher Cookies et autres données des sites et Images et fichiers en cache
  4. Cliquer sur Effacer les données

Mozilla Firefox :

  1. Ouvrir about:preferences#privacy
  2. Sous Cookies et données de sites, cliquer sur Effacer les données
  3. Sélectionner les deux options et confirmer

Safari (macOS) :

  1. Aller dans Safari > Réglages > Confidentialité
  2. Cliquer sur Gérer les données des sites web, puis sur Tout supprimer

Pour une approche plus ciblée — particulièrement utile lorsque vous ne souhaitez pas perdre toutes les données de session — utilisez les outils de développement du navigateur pour supprimer uniquement les cookies du domaine spécifique :

  1. Ouvrir les DevTools (F12 ou Cmd+Option+I)
  2. Naviguer vers Application > Stockage > Cookies
  3. Sélectionner le domaine et supprimer les cookies individuels

3. Vider le cache DNS

Windows :

ipconfig /flushdns

macOS (Ventura, Sonoma, Sequoia) :

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

Linux (systemd-resolved) :

sudo systemd-resolve --flush-caches

Linux (nscd) :

sudo service nscd restart

Après le vidage, vérifiez que la résolution est correcte avant de réessayer :

nslookup example.com

4. Désactiver les extensions du navigateur

Les extensions qui modifient les en-têtes HTTP sont les coupables les plus probables. Plutôt que de désactiver toutes les extensions simultanément, utilisez d’abord le mode navigation privée ou incognito du navigateur — la plupart des extensions sont désactivées par défaut dans les fenêtres privées. Si la page se charge correctement en navigation privée, une extension est responsable.

Pour isoler l’extension spécifique dans Chrome :

  1. Naviguer vers chrome://extensions/
  2. Désactiver toutes les extensions
  3. Les réactiver une par une, en rechargeant la page après chacune

5. Tester sur un autre navigateur, appareil ou réseau

Cette étape permet de déterminer rapidement si le problème est spécifique à l’environnement. Si la page se charge sur un appareil mobile utilisant les données cellulaires mais échoue sur votre ordinateur de bureau, le problème est probablement local — soit la configuration du navigateur, un proxy au niveau réseau, ou un pare-feu d’entreprise modifiant les en-têtes de requête.

Comment corriger une erreur 400 Bad Request : étapes côté serveur

Ces étapes s’appliquent aux propriétaires de sites web, développeurs et administrateurs système ayant accès au serveur ou au panneau de contrôle d’hébergement.

6. Analyser les journaux d’accès et d’erreurs du serveur

Les journaux du serveur sont l’outil de diagnostic définitif. Une entrée 400 dans le journal d’accès affichera la ligne de requête brute qui a été rejetée.

Journal d’erreurs Nginx (chemin par défaut) :

tail -n 100 /var/log/nginx/error.log | grep " 400 "

Journal d’erreurs Apache :

tail -n 100 /var/log/apache2/error.log

Journal d’accès Nginx — filtrer les réponses 400 :

awk '$9 == 400' /var/log/nginx/access.log | tail -20

Recherchez des patterns : les erreurs 400 proviennent-elles d’un endpoint spécifique, d’un user agent spécifique, ou d’un paramètre spécifique ? Cela réduit considérablement la cause principale.

Si vous utilisez un environnement VPS Hosting, vous avez un accès SSH direct à ces journaux. Sur un Hébergement Web Mutualisé géré, les journaux d’accès sont généralement disponibles via la section Erreurs de cPanel ou via le téléchargement du journal Accès brut.

7. Auditer le fichier .htaccess (Apache)

Une seule erreur de syntaxe dans .htaccess peut amener Apache à retourner des erreurs 400 ou 500 pour chaque requête. Validez la syntaxe du fichier sans redémarrer Apache :

apachectl -t

Problèmes courants de .htaccess qui produisent des erreurs 400 :

  • Patterns RewriteRule avec des caractères spéciaux non échappés
LimitRequestBody défini à une valeur inopinément basse
Directives Header malformées

Exemple d’une directive problématique :
# This will cause a 400 if the header value is malformed
RequestHeader set X-Custom-Header "value with "quotes""
Version corrigée :
RequestHeader set X-Custom-Header "value with escaped quotes"
8. Vérifier la configuration Nginx
Validez l’ensemble de la configuration Nginx avant d’appliquer des modifications :
nginx -t
Portez attention à client_max_body_size si les utilisateurs téléversent des fichiers :
http {
    client_max_body_size 50M;
}
Vérifiez également large_client_header_buffers — si les en-têtes de requête (y compris les cookies) dépassent la taille du tampon, Nginx retourne un 400 :
http {
    large_client_header_buffers 4 16k;
}
Après modification, rechargez sans interruption de service :
nginx -s reload
9. Augmenter les limites de téléversement de fichiers
Si l’erreur 400 se produit spécifiquement lors du téléversement de fichiers, le corps de la requête dépasse probablement la limite configurée du serveur.
PHP (php.ini) :
upload_max_filesize = 50M
post_max_size = 55M
Apache (httpd.conf ou .htaccess) :
LimitRequestBody 52428800
Nginx (nginx.conf) :
client_max_body_size 50M;
Notez que post_max_size dans PHP doit toujours être supérieur à upload_max_filesize, sinon PHP ignorera silencieusement le téléversement et l’application peut retourner un 400.
10. Examiner les règles WAF et les plugins de sécurité
Si vous utilisez ModSecurity, Cloudflare WAF, ou un plugin de sécurité WordPress (Wordfence, iThemes Security), désactivez temporairement l’ensemble de règles WAF et vérifiez si le 400 disparaît. Si c’est le cas, examinez le journal d’audit WAF pour identifier quelle règle se déclenche :
tail -f /var/log/modsec_audit.log
Ne désactivez pas simplement le WAF de façon permanente. Créez plutôt une exception ciblée pour le pattern de requête légitime qui est bloqué.
400 Bad Request vs. codes d’erreur HTTP associés
Comprendre où se situe le 400 dans la taxonomie des erreurs HTTP permet d’éviter les erreurs de diagnostic.



Code de statut
Nom
Localisation de la faute
Cause typique








—
—
—
—








400
Bad Request
Client
Syntaxe de requête malformée, en-têtes invalides, encodage incorrect








401
Unauthorized
Client
Identifiants d’authentification manquants ou invalides








403
Forbidden
Politique serveur
Requête valide, mais l’accès est refusé par les règles du serveur








404
Not Found
Serveur
La ressource n’existe pas à l’URI demandé








413
Content Too Large
Client
Le corps de la requête dépasse la limite de taille configurée du serveur








414
URI Too Long
Client
L’URI de la requête dépasse la longueur maximale d’URI du serveur








422
Unprocessable Content
Client
Syntaxiquement valide mais sémantiquement incorrect (courant dans les API REST)








431
Request Header Fields Too Large
Client
La taille individuelle ou totale des en-têtes dépasse les limites du serveur








500
Internal Server Error
Serveur
Exception non gérée ou mauvaise configuration sur le serveur








502
Bad Gateway
Serveur/Proxy
Le serveur en amont a retourné une réponse invalide





Une distinction opérationnelle clé : 413 (Content Too Large) est le code sémantiquement plus précis pour les téléversements trop volumineux, mais de nombreux serveurs — en particulier les anciennes configurations Apache et Nginx — retournent 400 à la place. Si vous voyez un 400 lors d’un téléversement de fichier, vérifiez toujours les limites de taille du corps en premier.
Erreurs 400 dans les contextes API
Les API REST et GraphQL utilisent largement le 400 comme réponse standard aux échecs de validation des entrées. Si vous développez ou consommez une API, un corps de réponse 400 contiendra généralement une charge utile d’erreur structurée :
{
  "error": "Bad Request",
  "message": "The 'email' field must be a valid email address.",
  "field": "email",
  "code": 400
}
Lors du débogage des erreurs 400 d’API :

Vérifiez que l’en-tête Content-Type correspond au format du corps (application/json pour les charges utiles JSON, multipart/form-data pour les téléversements de fichiers)
Confirmez que les champs et en-têtes requis sont présents et correctement typés
Vérifiez que les valeurs de type chaîne ne dépassent pas les contraintes de longueur maximale
Validez les formats de date et d’heure par rapport à la spécification API (ISO 8601 est standard : 2024-01-15T10:30:00Z)
Inspectez le format de l’en-tête Authorization — les tokens Bearer doivent être préfixés par Bearer , et non transmis bruts

Pour les équipes exploitant des services API sur des Serveurs Dédiés, activer la journalisation détaillée des requêtes au niveau applicatif (et pas seulement au niveau du serveur web) est essentiel pour diagnostiquer les patterns d’erreurs 400 à grande échelle.
Diagnostic des erreurs 400 avec les outils de développement du navigateur
Le panneau Réseau des outils de développement du navigateur est l’outil de diagnostic côté client le plus précis disponible.

Ouvrir les DevTools (F12)
Naviguer vers l’onglet Réseau
Reproduire la requête qui déclenche le 400
Cliquer sur la requête échouée dans la cascade
Inspecter l’onglet En-têtes — examiner à la fois les En-têtes de requête et les En-têtes de réponse
Vérifier l’onglet Réponse pour tout détail d’erreur retourné par le serveur

Le panneau En-têtes de requête affichera exactement ce que le navigateur a envoyé. Comparez cela avec ce que le serveur attend. Examinez spécifiquement :

La valeur de l’en-tête Host
  • La taille et le contenu de l’en-tête Cookie
  • Content-Type et Content-Length pour les requêtes POST/PUT
  • Tout en-tête personnalisé injecté par des extensions
  • Prévenir les erreurs 400 dans les applications web

    Pour les développeurs et les administrateurs de serveurs, des mesures proactives réduisent significativement l’incidence des erreurs 400.

    Assainissement et validation des entrées au niveau applicatif — Validez toutes les entrées fournies par l’utilisateur avant qu’elles n’atteignent la couche de routage du serveur. Retournez des réponses 400 descriptives avec des messages d’erreur au niveau des champs plutôt que des échecs génériques.

    Implémenter un encodage URL approprié dans le code client — Utilisez des fonctions d’encodage intégrées plutôt que la manipulation manuelle de chaînes :

    // JavaScript — correct approach
    const query = encodeURIComponent("hello world & more");
    const url = `https://example.com/search?q=${query}`;
    # Python — correct approach
    from urllib.parse import urlencode
    params = urlencode({"q": "hello world & more"})
    url = f"https://example.com/search?{params}"

    Définir des limites de taille de corps explicites et raisonnables — Ne laissez pas client_max_body_size à la valeur par défaut de 1 Mo si votre application accepte des téléversements de fichiers. De même, ne le définissez pas comme illimité — cela crée un vecteur de déni de service.

    Surveiller les taux d’erreurs 400 en production — Une soudaine augmentation des erreurs 400 est souvent le premier indicateur d’un bot analysant les vulnérabilités, d’un formulaire côté client défaillant, ou d’un déploiement ayant introduit un changement d’API incompatible. Configurez des alertes sur votre taux d’erreurs 4xx dans votre stack de surveillance (Grafana, Datadog, CloudWatch).

    Utiliser HTTPS avec un certificat SSL valide — Certaines erreurs 400 surviennent lorsque des clients envoient des requêtes HTTPS à un serveur qui n’est pas correctement configuré pour TLS, ou lorsqu’une incompatibilité de certificat provoque l’échec de la négociation TLS avant même que la couche HTTP ne soit atteinte. S’assurer que vos Certificats SSL sont valides, correctement installés et couvrent tous les sous-domaines requis élimine entièrement cette classe d’erreurs.

    Configurer correctement les environnements de panneau de contrôle — Si vous gérez plusieurs sites via un panneau de contrôle, les définitions d’hôtes virtuels mal configurées sont une source courante d’erreurs 400. Les environnements utilisant un VPS avec cPanel doivent vérifier que la racine du document, la liaison SSL et les règles de réécriture de chaque domaine sont correctement délimitées pour éviter la contamination des requêtes inter-domaines.

    Matrice de décision : diagnostiquer une erreur 400 par symptôme

    SymptômeCause la plus probablePremière action
    400 sur chaque page d’un site, fonctionne ailleursCookie corrompu spécifique au siteEffacer les cookies uniquement pour ce domaine
    400 uniquement lors de la soumission d’un formulaire ou d’un téléversementCharge utile trop volumineuse ou `Content-Type` incorrectVérifier les limites de taille du corps du serveur et le `enctype` du formulaire
    400 sur une URL saisie manuellementErreur d’encodage URL ou faute de frappeRé-encoder l’URL ; vérifier les caractères illégaux
    400 uniquement dans les appels APIEn-tête requis manquant ou JSON invalideInspecter les en-têtes de requête et valider le schéma de la charge utile
    400 après un changement de configuration serveurErreur de syntaxe dans `.htaccess` ou la configuration NginxExécuter `apachectl -t` ou `nginx -t`
    400 pour tous les utilisateurs simultanémentRègle WAF déclenchée ou mauvaise configuration du serveurVérifier le journal d’audit WAF et le journal d’erreurs du serveur
    400 uniquement dans un navigateurExtension injectant de mauvais en-têtesTester en navigation privée ; désactiver les extensions
    400 après un changement DNSCache DNS pointant vers le mauvais serveurVider le cache DNS ; vérifier avec `nslookup`

    Liste de contrôle technique : résoudre une erreur 400 Bad Request

    Pour les utilisateurs finaux :

    • Inspecter et ressaisir manuellement l’URL en corrigeant les problèmes d’encodage
    • Effacer les cookies et le cache spécifiquement pour le domaine affecté
    • Tester dans une fenêtre privée/incognito pour exclure les extensions
    • Vider le cache DNS local
    • Tester sur un autre navigateur, appareil et connexion réseau

    Pour les développeurs et consommateurs d’API :

    • Valider que Content-Type correspond au format du corps de la requête
    • Confirmer que tous les champs et en-têtes requis sont présents et correctement typés
    • Vérifier que les valeurs de type chaîne, les dates et les types numériques sont conformes au contrat API
    • Utiliser curl avec une sortie verbeuse pour inspecter l’échange HTTP brut :
    curl -v -X POST https://api.example.com/endpoint 
      -H "Content-Type: application/json" 
      -H "Authorization: Bearer YOUR_TOKEN" 
      -d '{"key": "value"}'

    Pour les administrateurs de serveurs :

    • Extraire et filtrer les journaux d’erreurs du serveur pour les entrées 400
    • Valider la syntaxe de configuration du serveur web (nginx -t / apachectl -t)
    • Vérifier client_max_body_size (Nginx) et LimitRequestBody (Apache)
    • Examiner large_client_header_buffers dans Nginx si des requêtes avec beaucoup de cookies échouent
    • Auditer les règles WAF et vérifier le journal d’audit ModSecurity
    • Vérifier la validité et la couverture du certificat SSL/TLS
    • Confirmer que les règles de réécriture .htaccess sont syntaxiquement correctes

    FAQ

    Quelle est la différence entre une erreur 400 et une erreur 404 ?

    Une erreur 400 signifie que le serveur n’a pas pu comprendre la requête car elle était malformée — la faute réside dans la façon dont la requête a été construite. Une erreur 404 signifie que la requête était valide et comprise, mais que la ressource demandée n’existe tout simplement pas sur le serveur. Elles nécessitent des corrections entièrement différentes.

    Une erreur 400 Bad Request peut-elle être causée par le serveur et non par le client ?

    Oui, indirectement. Une mauvaise configuration du serveur — comme une règle WAF trop restrictive, un paramètre Nginx large_client_header_buffers incorrect, ou une directive .htaccess défaillante — peut amener le serveur à rejeter des requêtes qui sont techniquement valides. Dans ces cas, la spécification HTTP est toujours respectée (le serveur rejette ce qu’il perçoit comme une mauvaise requête), mais la vraie faute réside dans la configuration du serveur, et non dans la requête du client.

    Pourquoi vider les cookies corrige-t-il une erreur 400 ?

    Les cookies sont envoyés dans l’en-tête de requête Cookie à chaque requête vers le domaine concerné. Si un cookie stocké dans le navigateur est malformé, expiré d’une manière que le serveur n’accepte pas, ou est devenu trop volumineux (dépassant les limites large_client_header_buffers dans Nginx), le serveur rejette l’intégralité de la requête avec un 400 avant de la traiter. Supprimer le cookie corrompu retire les données incorrectes de l’en-tête.

    Comment corriger une erreur 400 lors du téléversement de fichiers sur mon site web ?

    Le téléversement dépasse soit la limite de taille du corps du serveur web, soit la limite de taille de téléversement de PHP. Sur Nginx, augmentez client_max_body_size dans nginx.conf. Sur Apache, ajustez LimitRequestBody dans .htaccess ou httpd.conf. Pour les applications PHP, mettez à jour upload_max_filesize et post_max_size dans php.ini, en vous assurant que post_max_size est supérieur à upload_max_filesize. Redémarrez les services concernés après avoir effectué les modifications.

    Comment savoir si une erreur 400 provient d’un CDN ou d’un WAF plutôt que de mon serveur d’origine ?

    Vérifiez les en-têtes de réponse. Cloudflare ajoute les en-têtes cf-ray et server: cloudflare. AWS CloudFront ajoute x-amz-cf-id. Si ces en-têtes sont présents dans la réponse 400, le rejet s’est produit en périphérie et non sur votre serveur d’origine. Examinez les journaux WAF du CDN ou le tableau de bord des événements du pare-feu pour identifier quelle règle a déclenché le blocage, puis créez une exception ciblée pour le pattern de trafic légitime.

    15%

    Économisez 15% sur tous les services d'hébergement

    Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

    Utilisez le code :

    Skills
    Commencer