Erreur HTTP 429 : Too Many Requests
Rate limiting : comprendre et gĂ©rer les limites de requĂȘtes.
L'erreur HTTP 429 "Too Many Requests" indique que le client a envoyĂ© trop de requĂȘtes dans un laps de temps donnĂ©. C'est le mĂ©canisme de rate limiting qui protĂšge les serveurs et APIs contre les abus, les surcharges et les attaques DDoS.
Le rate limiting est une pratique standard pour toutes les APIs publiques. Chaque fournisseur dĂ©finit ses propres limites (requĂȘtes par seconde, par minute, par heure) et les communique via des headers spĂ©cifiques. Respecter ces limites est essentiel pour maintenir l'accĂšs au service.
Pour le monitoring, le 429 peut ĂȘtre problĂ©matique si les checks sont trop frĂ©quents. Une bonne stratĂ©gie consiste Ă espacer les vĂ©rifications et Ă implĂ©menter un exponential backoff en cas de 429 pour Ă©viter de saturer davantage l'API.
Causes principales des erreurs 429
L'erreur 429 survient quand les limites de requĂȘtes sont dĂ©passĂ©es :
- Trop de requĂȘtes : Votre application envoie plus de requĂȘtes que la limite autorisĂ©e (ex: 100 req/min mais vous en envoyez 200).
- Boucle infinie : Un bug dans le code crĂ©e une boucle qui envoie des requĂȘtes en continu, Ă©puisant rapidement le quota.
- IP partagĂ©e : Plusieurs utilisateurs ou applications partagent la mĂȘme IP, cumulant les requĂȘtes vers la mĂȘme limite.
- Quota épuisé : Le quota journalier ou mensuel est atteint. Courant sur les offres gratuites avec limites strictes.
Headers de rate limiting
Les APIs bien conçues incluent des headers pour gérer le rate limiting :
- Retry-After : Nombre de secondes à attendre avant de réessayer. Header standard obligatoire dans la RFC pour les 429.
- X-RateLimit-Limit : Limite maximale de requĂȘtes pour la pĂ©riode (ex: 1000 requĂȘtes par heure).
- X-RateLimit-Remaining : Nombre de requĂȘtes restantes avant d'atteindre la limite. Utile pour le monitoring proactif.
- X-RateLimit-Reset : Timestamp Unix indiquant quand le compteur sera réinitialisé (ex: 1609459200).
Résolution des erreurs 429
Voici les stratégies pour gérer et éviter les erreurs 429 :
- Exponential backoff : Attendez 1s, puis 2s, 4s, 8s... entre les rĂ©essais. Ăvite de saturer l'API pendant sa rĂ©cupĂ©ration.
- Respecter Retry-After : Attendez le temps indiquĂ© dans le header Retry-After avant de rĂ©essayer la requĂȘte.
- Mise en cache : Cachez les rĂ©ponses quand possible pour rĂ©duire le nombre de requĂȘtes Ă l'API.
- Webhooks : PrĂ©fĂ©rez les webhooks (push) au polling (pull) pour ĂȘtre notifiĂ© sans requĂȘtes rĂ©pĂ©tĂ©es.
Implémentation exponential backoff
Voici un exemple d'implémentation d'exponential backoff :
// JavaScript - Exponential backoff
async function fetchWithBackoff(url, maxRetries = 5) {
for (let i = 0; i < maxRetries; i++) {
const response = await fetch(url);
if (response.status === 429) {
const retryAfter = response.headers.get("Retry-After");
const waitTime = retryAfter
? parseInt(retryAfter) * 1000
: Math.pow(2, i) * 1000; // 1s, 2s, 4s, 8s, 16s
console.log(`429 reçu, attente ${waitTime}ms`);
await new Promise(r => setTimeout(r, waitTime));
continue;
}
return response;
}
throw new Error("Max retries atteint");
}
L'exponential backoff évite de saturer l'API en espaçant progressivement les réessais. Toujours respecter Retry-After quand présent.
Monitoring et rate limits
Le monitoring doit respecter les rate limits pour ne pas ĂȘtre bloquĂ© :
- Intervalle appropriĂ© : Espacez les checks (1-5 minutes gĂ©nĂ©ralement). Ăvitez les vĂ©rifications trop frĂ©quentes sur les APIs tierces.
- Whitelist IP : Si possible, faites whitelister les IP de monitoring auprÚs du fournisseur d'API pour éviter les 429.
- Surveiller les headers : Surveillez X-RateLimit-Remaining pour anticiper les limites avant d'atteindre le 429.
- Alertes appropriées : Configurez des alertes sur 429 mais évitez le spam si le 429 est temporaire et résolu par backoff.
Checklist rate limiting
- Exponential backoff implémenté dans le code
- Header Retry-After respecté
- Cache utilisĂ© pour rĂ©duire les requĂȘtes
- Intervalle de monitoring approprié
- Quotas API surveillés proactivement
- Webhooks préférés au polling quand possible
Questions fréquentes sur HTTP 429
Comment éviter les 429 lors du monitoring ?
Utilisez des intervalles de vĂ©rification raisonnables (1-5 minutes). MoniTao ne gĂ©nĂšre qu'une requĂȘte par check. Pour les APIs strictes, demandez une whitelist des IPs de monitoring.
Qu'est-ce que l'exponential backoff ?
C'est une stratégie de réessai qui double le temps d'attente aprÚs chaque échec (1s, 2s, 4s, 8s...). Cela évite de saturer un service déjà surchargé.
Le 429 affecte-t-il le SEO ?
Indirectement oui. Si Googlebot reçoit des 429, votre crawl budget est gaspillé et l'indexation ralentie. Assurez-vous de ne pas bloquer les bots légitimes.
Comment savoir quand réessayer aprÚs un 429 ?
Consultez le header Retry-After de la réponse. Il indique en secondes combien de temps attendre. Sans ce header, utilisez l'exponential backoff.
Puis-je demander une augmentation de limite ?
Souvent oui. Contactez le fournisseur d'API pour expliquer votre cas d'usage. Les offres payantes ont généralement des limites plus élevées.
Comment implémenter le rate limiting sur mon API ?
Utilisez un middleware (express-rate-limit, Django Ratelimit, etc.). Retournez 429 avec Retry-After et les headers X-RateLimit-*. Documentez vos limites.
Conclusion
L'erreur HTTP 429 Too Many Requests est un mécanisme de protection essentiel pour les APIs. Respecter les limites de rate limiting est crucial pour maintenir l'accÚs au service et éviter les blocages.
MoniTao utilise des intervalles de vérification configurables pour éviter de déclencher les rate limits. Pour les APIs tierces avec des limites strictes, espacez vos checks et implémentez un backoff approprié dans vos propres applications.
Liens utiles
PrĂȘt Ă dormir sur vos deux oreilles ?
Commencez gratuitement, sans carte bancaire.