Inhoud

    Serverrespons 429 Too Many Requests

    HTTP Statuscode 429 (Te Veel Verzoeken)

    De HTTP-statuscode 429 geeft aan dat de client te veel verzoeken verzendt binnen een bepaalde tijdsperiode. Dit kan optreden wanneer de server de frequentie van verzoeken beperkt om te beschermen tegen overbelasting of potentiële aanvallen. In dit artikel wordt uitvoerig besproken hoe deze statuscode werkt, met praktische voorbeelden van het gebruik ervan en oplossingen voor het verhelpen van deze statuscode in verschillende programmeertalen.

    429 - Too Many Requests

    Waarom ontstaat statuscode 429

    • Oorzaken van ontstaan
      • Beperkingen op de frequentie van verzoeken
      • Bescherming tegen DDoS-aanvallen
      • Overbelasting van servers
    • Voorbeelden van scenario's
      • Een gebruiker die de pagina voortdurend vernieuwt
      • Een geautomatiseerd script dat herhaaldelijk verzoeken verzendt

    Praktische voorbeelden van het gebruik van code 429

    1. Voorbeeld 1: Beperking van verzoeken op een website

      Stel je voor dat een gebruiker een webpagina voortdurend vernieuwt. Wanneer deze gebruiker de toegestane limiet overschrijdt, reageert de server met de statuscode 429.

    2. Voorbeeld 2: API die beperkingen toepast

      Bij een API kan de ontwikkelaar instellen dat er een limiet is aan het aantal verzoeken dat per tijdseenheid kan worden gedaan. Als deze limiet wordt overschreden, retourneert de server de statuscode 429. Klanten moeten deze fout effectief afhandelen.

    Oplossingen voor probleem met code 429 in verschillende programmeertalen

    • Python
      • Gebruik de requests bibliotheek om de statuscode 429 te verwerken.
      • Voorbeeldcode voor het opnieuw verzenden van een verzoek met behulp van een timer:
      • 
        import time
        import requests
        
        url = "https://example.com/api"
        
        while True:
            response = requests.get(url)
            if response.status_code == 429:
                print("Te veel verzoeken. Wacht 10 seconden.")
                time.sleep(10)  # Wacht voor opnieuw proberen
            else:
                break
                    
    • JavaScript (Node.js)
      • Bij het werken met fetch of axios kan de statuscode 429 worden afgehandeld.
      • Implementatie van een mechanisme voor opnieuw verzenden met behulp van async/await:
      • 
        const axios = require('axios');
        
        async function fetchData() {
            try {
                const response = await axios.get('https://example.com/api');
                console.log(response.data);
            } catch (error) {
                if (error.response && error.response.status === 429) {
                    console.log('Te veel verzoeken. Wacht 10 seconden.');
                    await new Promise(resolve => setTimeout(resolve, 10000)); // Wacht voor opnieuw proberen
                    await fetchData(); // Probeer opnieuw
                }
            }
        }
        
        fetchData();
                    
    • PHP
      • Bij het afhandelen van API-verzoeken kan de statuscode 429 worden verwerkt.
      • Voorbeeldimplementatie van logica voor vertraging vóór opnieuw proberen:
      • 
        <?php
        $url = "https://example.com/api";
        
        while (true) {
            $response = file_get_contents($url);
            if ($http_response_header[0] == "HTTP/1.1 429 Too Many Requests") {
                echo "Te veel verzoeken. Wacht 10 seconden.\n";
                sleep(10); // Wacht voor opnieuw proberen
            } else {
                break;
            }
        }
        ?>
                    

    Aanbevelingen om het ontstaan van status 429 te voorkomen

    • Stel limieten in voor verzoeken op de server.
    • Maak gebruik van cachingmechanismen.
    • Optimaliseer verzoeken aan de clientzijde.

    Voorbeelden van succesvol beheer van status 429

    • Casestudy's uit de praktijk
      • Hoe bedrijven omgaan met hoge belasting op hun servers.
      • Succesvolle strategieën om het aantal 429-codes te verminderen.