Erreur HTTP 400 : Bad Request
Comprendre et rĂ©soudre les erreurs de requĂȘte malformĂ©e.
L'erreur HTTP 400 "Bad Request" est l'une des erreurs client les plus courantes sur le web. Elle indique que le serveur n'a pas pu comprendre ou traiter la requĂȘte en raison d'une syntaxe incorrecte, de donnĂ©es mal formĂ©es ou de paramĂštres invalides.
Contrairement aux erreurs 5xx qui signalent un problĂšme serveur, le code 400 pointe vers un problĂšme cĂŽtĂ© client. Cela peut ĂȘtre une URL mal encodĂ©e, un corps de requĂȘte JSON invalide, des en-tĂȘtes HTTP incorrects ou des cookies corrompus. Identifier la cause exacte requiert une analyse mĂ©thodique.
Pour les APIs REST et les applications web modernes, le monitoring des erreurs 400 est essentiel. Un pic soudain de 400 peut indiquer un bug dans votre frontend, une incompatibilité aprÚs une mise à jour, ou une attaque tentant de faire planter votre systÚme.
Causes principales des erreurs 400
Les erreurs 400 peuvent provenir de nombreuses sources. Voici les causes les plus fréquentes :
- URL mal formĂ©e : CaractĂšres spĂ©ciaux non encodĂ©s, espaces dans l'URL, ou paramĂštres de requĂȘte invalides. Exemple : /page?name=Jean Pierre au lieu de /page?name=Jean%20Pierre.
- Corps de requĂȘte invalide : JSON mal formĂ©, XML invalide, ou donnĂ©es form-data avec une structure incorrecte. Les accolades manquantes ou les virgules en trop sont des erreurs courantes.
- Cookies corrompus : Des cookies trop volumineux ou contenant des caractĂšres invalides peuvent provoquer un 400. Cela arrive souvent aprĂšs des mises Ă jour qui changent le format des cookies.
- En-tĂȘtes HTTP invalides : Content-Type manquant ou incorrect, Authorization mal formatĂ©, ou en-tĂȘtes personnalisĂ©s avec des valeurs interdites.
Diagnostic d'une erreur 400
Pour identifier la cause exacte d'une erreur 400, suivez cette méthodologie :
- Inspecter la requĂȘte : Utilisez les DevTools du navigateur (onglet Network) pour examiner la requĂȘte complĂšte : URL, en-tĂȘtes, corps et cookies envoyĂ©s.
- Tester en isolation : Reproduisez la requĂȘte avec curl ou Postman pour Ă©liminer les variables liĂ©es au navigateur ou au cache.
- Consulter les logs serveur : Les logs serveur contiennent souvent un message dĂ©taillĂ© expliquant pourquoi la requĂȘte a Ă©tĂ© rejetĂ©e.
- Tester en navigation privée : Si l'erreur disparaßt en navigation privée, le problÚme vient probablement des cookies ou du cache local.
Résolution des erreurs 400
Selon la cause identifiée, voici les solutions à appliquer :
- Encoder correctement l'URL : Utilisez encodeURIComponent() en JavaScript ou urlencode() en PHP pour les paramÚtres contenant des caractÚres spéciaux.
- Valider le JSON : Avant d'envoyer une requĂȘte, validez le JSON avec JSON.parse() ou un outil en ligne. VĂ©rifiez les guillemets doubles et l'absence de virgules finales.
- Vider les cookies : Supprimez les cookies du domaine concerné. Si le problÚme est généralisé, envisagez de changer le format de vos cookies.
- Corriger les en-tĂȘtes : Assurez-vous que Content-Type correspond au corps envoyĂ© (application/json pour du JSON, multipart/form-data pour les fichiers).
Exemples de validation et diagnostic
Voici des exemples de code pour diagnostiquer et prévenir les erreurs 400 :
// JavaScript - Valider JSON avant envoi
function safeSendJSON(url, data) {
try {
const jsonString = JSON.stringify(data);
JSON.parse(jsonString); // Vérification de validité
return fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: jsonString
});
} catch (e) {
console.error("JSON invalide:", e.message);
throw new Error("Données invalides");
}
}
// PHP - Validation cÎté serveur
$json = file_get_contents("php://input");
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
http_response_code(400);
echo json_encode(["error" => "JSON invalide"]);
exit;
}
Une validation cÎté client ET serveur est essentielle. CÎté client pour une meilleure UX, cÎté serveur pour la sécurité.
Prévention des erreurs 400
Mieux vaut prévenir que guérir. Voici les bonnes pratiques :
- Validation frontend : Validez les données de formulaire avant envoi avec des bibliothÚques comme Yup, Joi ou Zod.
- Tests automatisés : Incluez des tests d'intégration qui vérifient le comportement de votre API face à des entrées invalides.
- Limites de taille : Documentez et validez les limites de taille des requĂȘtes (body, URL, cookies) pour Ă©viter les dĂ©passements.
- Messages d'erreur clairs : Retournez des messages d'erreur descriptifs pour aider au dĂ©bogage. Ăvitez les 400 gĂ©nĂ©riques sans explication.
Checklist de résolution 400
- URL correctement encodée (pas de caractÚres spéciaux nus)
- Corps de requĂȘte JSON/XML valide et bien formĂ©
- Cookies non corrompus (tester en navigation privée)
- En-tĂȘte Content-Type correspondant au corps envoyĂ©
- Taille de requĂȘte dans les limites du serveur
- Logs serveur consultés pour le message d'erreur détaillé
Questions fréquentes sur HTTP 400
L'erreur 400 est-elle une erreur serveur ou client ?
C'est une erreur client (codes 4xx). Le serveur fonctionne correctement mais ne peut pas traiter la requĂȘte car elle est mal formĂ©e. C'est au client de corriger sa requĂȘte.
Comment monitorer les erreurs 400 sur mon API ?
Configurez un monitor MoniTao avec une requĂȘte valide attendant HTTP 200. Si votre endpoint retourne 400, vous serez alertĂ© immĂ©diatement. Pour les APIs, crĂ©ez des monitors avec le bon format de body et d'authentification.
Pourquoi mon formulaire retourne soudainement 400 ?
Les causes probables : cookies corrompus (essayez en navigation privée), mise à jour frontend/backend avec incompatibilité de format, ou validation plus stricte ajoutée cÎté serveur.
Comment renvoyer une erreur 400 avec un message utile ?
Retournez un JSON structuré : {"error": "description", "field": "nom_du_champ", "details": "message explicatif"}. Cela aide énormément au débogage cÎté client.
Le code 400 affecte-t-il le SEO ?
Pas directement pour les pages publiques qui doivent retourner 200. Cependant, si vos URLs publiques retournent 400 à cause de paramÚtres mal gérés, ces pages ne seront pas indexées.
Quelle différence entre 400 Bad Request et 422 Unprocessable Entity ?
400 indique une requĂȘte syntaxiquement incorrecte (JSON mal formĂ©). 422 indique une requĂȘte bien formĂ©e mais sĂ©mantiquement invalide (email au mauvais format dans un JSON valide).
Conclusion
L'erreur HTTP 400 Bad Request signale que quelque chose ne va pas dans la requĂȘte envoyĂ©e au serveur. Une bonne pratique consiste Ă valider les donnĂ©es cĂŽtĂ© client avant envoi, et Ă fournir des messages d'erreur explicites cĂŽtĂ© serveur pour faciliter le diagnostic.
Avec MoniTao, surveillez vos endpoints critiques et soyez alerté dÚs qu'une erreur 400 apparaßt. Un monitoring proactif permet de détecter les problÚmes d'intégration, les incompatibilités aprÚs mise à jour, et les tentatives d'exploitation avant qu'ils n'impactent vos utilisateurs.
Liens utiles
PrĂȘt Ă dormir sur vos deux oreilles ?
Commencez gratuitement, sans carte bancaire.