Nova Uptime
GidsenHTTP-status-codes502-bad-gateway503-service-unavailable

HTTP Status Codes uitgelegd voor developers - wat elke code betekent

Complete naslaggids voor HTTP status codes met praktijkvoorbeelden. Wat elke code betekent en hoe je veelvoorkomende fouten zoals 502 en 404 oplost.

SN
Sumit Nova Uptime
21 februari 2026 · 17 min read
Share:

Waarom je HTTP status codes moet snappen#

Je e-commerce-site geeft een 500-fout tijdens checkout. Klanten zien "Er ging iets mis." Maar wat ging er nou echt mis? De server doet het prima. De database is up. Het probleem zit ergens anders — maar de 500 vertelt je niet waar.

Je API-endpoint geeft een 429-fout, en je mobiele app crasht in plaats van een retry-melding te tonen. Gebruikers denken dat de app stuk is, terwijl je rate limiter gewoon zijn werk doet.

Je statuspagina zegt "All Systems Operational", maar klanten melden dat pagina's als 403 Forbidden laden. Je monitoring vangt het niet op omdat die alleen de homepage checkt.

HTTP status codes zijn signalen. Ze vertellen je wat er mis ging en waar je moet kijken. Maar alleen als je weet wat elke code betekent.

Deze gids legt elke HTTP status code uit die je tegenkomt, wat hem triggert, en wat je moet doen als je hem ziet.


HTTP status codes: het complete plaatje#

HTTP-responses zijn georganiseerd in vijf klassen:

  • 1xx (100-199): Informational — "Request ontvangen, bezig met verwerken"
  • 2xx (200-299): Success — "Alles werkte"
  • 3xx (300-399): Redirection — "Probeer ergens anders"
  • 4xx (400-499): Client Error — "Jij hebt iets fout gedaan"
  • 5xx (500-599): Server Error — "Wij hebben iets fout gedaan"

Elke klasse vertelt je waar het probleem zit. Krijg je 4xx-fouten, dan zit het probleem in de request (verkeerde URL, verkeerde authenticatie, ontbrekende data). Krijg je 5xx-fouten, dan zit het probleem bij je server.


2xx Success Status Codes (alles ging goed)#

200 OK#

Wat het betekent: De request is gelukt. De response body bevat de gevraagde data.

Wanneer je 'm ziet:

  • Browser laadt een webpagina
  • API geeft JSON-data terug
  • Formulierinzending lukt

Voorbeeld:

GET /api/users/123
Response: 200 OK
Body: {"id": 123, "name": "John", "email": "john@example.com"}

Actie: geen. Alles werkt zoals het hoort.

201 Created#

Wat het betekent: De request is gelukt en er is een nieuwe resource aangemaakt. De response bevat de zojuist aangemaakte resource.

Wanneer je 'm ziet:

  • POST om een nieuwe gebruiker aan te maken geeft 201 Created
  • Een nieuwe order aanmaken geeft 201 Created
  • Een file uploaden geeft 201 Created

Voorbeeld:

POST /api/users
Request: {"name": "Jane", "email": "jane@example.com"}
Response: 201 Created
Body: {"id": 456, "name": "Jane", "email": "jane@example.com", "created_at": "2026-02-20T10:00:00Z"}

Actie: geen. De resource is succesvol aangemaakt.

202 Accepted#

Wat het betekent: De request is geaccepteerd voor verwerking, maar nog niet verwerkt. Wordt gebruikt voor async-operaties.

Wanneer je 'm ziet:

  • Een long-running job indienen (bijvoorbeeld video-encoding, rapportgeneratie)
  • Batchverwerkingsoperaties
  • Taken die op de achtergrond worden verwerkt

Voorbeeld:

POST /api/batch-emails/send
Request: {"recipient_ids": [1,2,3,...,10000]}
Response: 202 Accepted
Body: {"job_id": "job_12345", "status": "queued"}

Actie: de taak staat in de queue. Check later met de job ID om de status te zien.

204 No Content#

Wat het betekent: De request is gelukt, maar er is geen content om terug te geven.

Wanneer je 'm ziet:

  • DELETE-requests (succesvol verwijderd, niets terug te geven)
  • Geslaagde PATCH zonder response body
  • Webhook-acknowledgments

Voorbeeld:

DELETE /api/users/123
Response: 204 No Content
Body: (empty)

Actie: geen. De actie is gelukt.


3xx Redirection Status Codes (probeer ergens anders)#

301 Moved Permanently#

Wat het betekent: De resource is permanent verhuisd naar een nieuwe URL. Zoekmachines updaten hun index en browsers gebruiken de nieuwe URL voor toekomstige requests.

Wanneer je 'm ziet:

  • Website is gemigreerd van www.oldsite.com naar newsite.com
  • Oud API-endpoint vervangen door een nieuw
  • URL-structuur is gewijzigd

Voorbeeld:

GET /old-page.html
Response: 301 Moved Permanently
Header: Location: /new-page.html

Actie:

  • Voor gebruikers: browser volgt de redirect automatisch (transparant)
  • Voor SEO: zorg dat 301 wordt gebruikt voor permanente wijzigingen (Google draagt page rank over)
  • Voor API's: clients moeten updaten naar de nieuwe URL

302 Found (Temporary Redirect)#

Wat het betekent: De resource is tijdelijk verhuisd naar een andere URL. De originele URL is nog steeds geldig, dus browsers cachen de nieuwe URL NIET.

Wanneer je 'm ziet:

  • Tijdelijke redirects tijdens onderhoud
  • Redirects naar een loginpagina
  • A/B-testing (sommige gebruikers tijdelijk doorsturen naar een nieuwe versie)

Voorbeeld:

GET /products/discount-flash-sale
Response: 302 Found
Header: Location: /products/2026-flash-sale

Actie: browser volgt de redirect tijdelijk, maar behandelt de originele URL nog steeds als primair.

304 Not Modified#

Wat het betekent: De resource is niet veranderd sinds je laatste request. Gebruik de gecachete versie.

Wanneer je 'm ziet:

  • Browser checkt of een webpagina is veranderd sinds het laatste bezoek (kijkt naar modification date/ETag)
  • API geeft 304 terug als data niet is veranderd sinds de laatste request
  • Vermindert bandbreedte door onveranderde data niet opnieuw te sturen

Voorbeeld:

GET /api/user-profile
Request Header: If-Modified-Since: 2026-02-19 10:00:00
Response: 304 Not Modified
Body: (empty—use cached version from before)

Actie: browser/client gebruikt lokaal de gecachete versie.

307 Temporary Redirect#

Wat het betekent: Net als 302, maar garandeert dat de HTTP-method hetzelfde blijft tijdens de redirect.

Technisch verschil:

  • 302 staat methodwijziging toe (POST → GET na redirect)
  • 307 behoudt de method (POST → POST na redirect)

Wanneer je 'm ziet:

  • Form submission redirect naar een bevestigingspagina (POST → POST)
  • API-redirects waarbij de method behouden moet blijven

Waarom het ertoe doet: Oudere browsers zetten POST-redirects soms om naar GET, waardoor formulierdata kon verdwijnen. 307 voorkomt dit.


4xx Client Error Codes (jij hebt iets fout gedaan)#

400 Bad Request#

Wat het betekent: De request was misvormd. De server begreep er niets van.

Wanneer je 'm ziet:

  • Misvormde JSON in de request body
  • Verplichte velden ontbreken
  • Ongeldig parameterformaat
  • Syntaxfout in de query string

Voorbeeld:

POST /api/users
Request Body: {"name": "Jane" "email": "jane@example.com"}
                              ↑ Missing comma
Response: 400 Bad Request
Body: {"error": "Invalid JSON syntax"}

Actie:

  • Check de opmaak van je request
  • Valideer de JSON-syntax
  • Zorg dat verplichte velden aanwezig zijn
  • Verifieer dat parametertypes overeenkomen met de API-documentatie

401 Unauthorized#

Wat het betekent: Authenticatie is mislukt of ontbreekt. Je hebt niet bewezen wie je bent.

Wanneer je 'm ziet:

  • Geen authenticatietoken meegestuurd
  • Authenticatietoken is ongeldig of verlopen
  • Verkeerde gebruikersnaam/wachtwoord
  • API-key ontbreekt

Voorbeeld:

GET /api/user-profile
(No Authorization header)
Response: 401 Unauthorized
Body: {"error": "Authentication required"}

Actie:

  • Lever geldige authenticatie (login, API-key, token, enzovoort)
  • Vernieuw verlopen tokens
  • Check of de credentials kloppen

403 Forbidden#

Wat het betekent: Authenticatie is gelukt, maar je hebt geen permissie om bij deze resource te komen.

Wanneer je 'm ziet:

  • Gebruiker probeert het account van een ander te verwijderen
  • Gebruiker probeert bij een admin-only endpoint te komen
  • Gebruiker probeert bij een resource van een andere organisatie te komen
  • Onvoldoende permissies/rol

Voorbeeld:

DELETE /api/users/999
(Authenticated as user 123, trying to delete user 999)
Response: 403 Forbidden
Body: {"error": "You can only delete your own account"}

Actie:

  • Gebruik het juiste account met de juiste permissies
  • Vraag verhoogde permissies aan indien nodig
  • Verifieer of je bij de juiste resource bent

404 Not Found#

Wat het betekent: De resource bestaat niet, of de server weet niet hoe hij dit endpoint moet afhandelen.

Wanneer je 'm ziet:

  • Typfout in de URL (/users/ vs /users)
  • Endpoint bestaat niet
  • Resource is verwijderd
  • Verkeerde API-versie

Voorbeeld:

GET /api/users/nonexistent-id-12345
Response: 404 Not Found
Body: {"error": "User not found"}

Actie:

  • Check de spelling van de URL
  • Verifieer dat het endpoint bestaat
  • Check de API-documentatie
  • Probeer een andere ID/resource

405 Method Not Allowed#

Wat het betekent: Het endpoint bestaat, maar ondersteunt deze HTTP-method niet.

Wanneer je 'm ziet:

  • POST gebruiken op een endpoint dat alleen GET accepteert
  • DELETE gebruiken op een endpoint dat verwijderen niet ondersteunt
  • PATCH gebruiken terwijl alleen PUT is toegestaan

Voorbeeld:

DELETE /api/domains/123
(If DELETE isn't supported on domains endpoint)
Response: 405 Method Not Allowed
Header: Allow: GET, POST, PUT

Actie: gebruik de juiste HTTP-method. De response bevat meestal een Allow-header die de geldige methods toont.

408 Request Timeout#

Wat het betekent: De server heeft te lang gewacht tot de client de request stuurde en heeft het opgegeven.

Wanneer je 'm ziet:

  • Trage client uploadt een grote file
  • Netwerkverbinding valt midden in een request weg
  • Request duurt langer dan de server-timeout (meestal 30-300 seconden)

Voorbeeld:

POST /api/upload
(Uploading 500MB file on slow connection takes 10 minutes)
Response: 408 Request Timeout

Actie:

  • Probeer de request opnieuw
  • Splits grote requests in kleinere chunks
  • Check je netwerkverbinding
  • Verhoog de client-timeout als dat passend is

429 Too Many Requests#

Wat het betekent: Je doet te veel requests. Rate limit overschreden.

Wanneer je 'm ziet:

  • Je raakt de API rate limit (bijvoorbeeld 100 requests/minuut)
  • Te snel e-mails versturen
  • Brute-force loginpogingen
  • Web scraper hamert te hard op de server

Voorbeeld:

GET /api/users/123
(100th request in last minute)
Response: 429 Too Many Requests
Header: Retry-After: 60
Body: {"error": "Rate limit exceeded. Try again in 60 seconds"}

Actie:

  • Wacht voor een retry (check de Retry-After-header)
  • Implementeer exponential backoff
  • Gebruik paginering voor grote resultsets
  • Cache resultaten lokaal in plaats van ze opnieuw op te vragen

5xx Server Error Codes (wij hebben iets fout gedaan)#

500 Internal Server Error#

Wat het betekent: Er ging iets mis op de server, en de server kan geen verdere details geven.

Wanneer je 'm ziet:

  • Onafgehandelde exception in de code
  • Databaseverbinding mislukt
  • Geheugen op
  • Onverwachte conditie

Voorbeeld:

POST /api/checkout
Response: 500 Internal Server Error
Body: {"error": "Something went wrong"}

Waarom het zo vaag is: Servers tonen interne foutdetails niet aan clients om beveiligingsredenen. Gedetailleerde fouten helpen aanvallers.

Actie:

  • Check serverlogs voor de werkelijke fout
  • Als dit een third-party service is: neem contact op met support
  • Als het je eigen service is: check error logs, herstart indien nodig, draai een recente deploy terug

501 Not Implemented#

Wat het betekent: De server ondersteunt deze HTTP-method of feature niet.

Wanneer je 'm ziet:

  • Server ondersteunt geen HTTP/2-features
  • WebSocket niet ondersteund
  • Bepaalde HTTP-methods niet geïmplementeerd

Voorbeeld:

OPTIONS /api/users
(Server doesn't support OPTIONS method)
Response: 501 Not Implemented

Actie: meestal niets — gebruik een andere method of dienst. Zeldzaam in moderne API's.

502 Bad Gateway#

Wat het betekent: De server heeft een ongeldige response gekregen van een upstream-server.

Praktijkscenario's:

  1. Reverse proxy (Nginx) kan niet bij de backend

    Client → Nginx (gateway) → Node.js Backend
                    ↑
             Backend is down or unresponsive
    
  2. Load balancer kan geen healthy backend bereiken

    Client → Load Balancer → Backend Servers
                          ↑
               All backends down or slow
    
  3. API Gateway kan een microservice niet bereiken

    Client → API Gateway → Auth Service (down)
                        → User Service
                        → Order Service
    

Waarom het gebeurt:

  • Backend-server gecrasht
  • Netwerkconnectiviteit weg
  • Upstream-server is traag en time-out
  • Upstream geeft een misvormde response terug

Voorbeeld:

GET /dashboard
Response: 502 Bad Gateway

Achter de schermen:

Nginx received request
Tried to forward to Node.js server on localhost:3000
Connection refused (server not running)
Nginx returned: 502 Bad Gateway

Actie:

  • Check of backend-services draaien: docker ps, pm2 status, systemd-status
  • Check netwerkconnectiviteit naar de backend
  • Check backendlogs op crashes
  • Herstart de backendservice als die gecrasht is
  • Check of de load balancer correct routet

503 Service Unavailable#

Wat het betekent: De server kan tijdelijk geen requests afhandelen (onderhoud, overload, dependencies down).

Wanneer je 'm ziet:

  • Server is aan het herstarten
  • Server is zwaar belast (alle connections in gebruik)
  • Database is down of wordt gemigreerd
  • Third-party-dependency is down
  • Deploy is bezig (verkeer is gepauzeerd)

Voorbeeld:

GET /api/users
Response: 503 Service Unavailable
Header: Retry-After: 600
Body: {"error": "Server is undergoing maintenance. Try again in 10 minutes"}

Waarom servers 503 teruggeven tijdens onderhoud:

  • Vertelt clients "dit is tijdelijk, probeer later opnieuw"
  • Browsers en clients weten dat ze automatisch moeten retryen
  • Zoekmachines straffen 503 niet af (anders dan 500, dat eruitziet als een bug)

Actie:

  • Wacht en probeer opnieuw (check de Retry-After-header voor hoe lang)
  • Check de statuspagina voor onderhoudswindows
  • Als het een eigen service is: wacht tot de deploy klaar is, check de logs

504 Gateway Timeout#

Wat het betekent: De server heeft op tijd geen response gekregen van de upstream-server.

Wanneer je 'm ziet:

  • Backend-server is te traag
  • Te hoge netwerklatency
  • Database-query die te lang duurt
  • Upstream-server hangt

Voorbeeld:

Backend request:
GET /api/heavy-report
Wait 30 seconds...
Timeout!
Response: 504 Gateway Timeout

Praktijkoorzaak:

Client → Nginx (30s timeout) → Node.js Backend (60s query)
                             ↑
              Nginx gives up after 30s
              Backend is still running query

Actie:

  • Check de performance van de backend
  • Zoek naar trage database queries
  • Optimaliseer de code
  • Voeg database indexes toe
  • Verhoog de timeout als de operatie legitiem langer duurt
  • Splits lange operaties op in async jobs

HTTP Status Codes-naslagtabel#

CodeNaamCategorieBetekenis
200OKSuccessRequest gelukt
201CreatedSuccessResource aangemaakt
202AcceptedSuccessRequest in queue voor verwerking
204No ContentSuccessGeslaagd, geen response body
301Moved PermanentlyRedirectGebruik voortaan de nieuwe URL
302FoundRedirectTijdelijk op een andere URL
304Not ModifiedRedirectGebruik de gecachete versie
307Temp RedirectRedirectHTTP-method behouden bij redirect
400Bad RequestClient ErrorMisvormde request
401UnauthorizedClient ErrorAuthenticatie vereist
403ForbiddenClient ErrorToegang geweigerd
404Not FoundClient ErrorResource bestaat niet
405Method Not AllowedClient ErrorVerkeerde HTTP-method
408Request TimeoutClient ErrorRequest duurde te lang
429Too Many RequestsClient ErrorRate limited
500Internal Server ErrorServer ErrorGenerieke serverfout
501Not ImplementedServer ErrorFeature niet ondersteund
502Bad GatewayServer ErrorUpstream-fout
503Service UnavailableServer ErrorServer tijdelijk down
504Gateway TimeoutServer ErrorUpstream te traag

Hoe je HTTP-status-codeproblemen debugt#

Stap 1: identificeer de status code#

In de browser:

  1. Open Developer Tools (F12)
  2. Ga naar het Network-tabblad
  3. Kijk naar de gefaalde request
  4. De Status-kolom toont de code

In de terminal:

curl -i https://example.com/endpoint
# First line shows: HTTP/1.1 200 OK

In de applicatie:

  • Check error logs
  • Kijk naar het response-object
  • De meeste frameworks exposen de status code

Stap 2: snap wat het betekent#

Gebruik de categorieën:

  • 2xx? Werkt zoals bedoeld
  • 3xx? Check de redirect-bestemming
  • 4xx? Check request-format en permissies
  • 5xx? Check serverlogs en upstream-dependencies

Stap 3: kijk naar de response body en headers#

Response Body: De meeste API's geven foutdetails:

{
  "error": "User not found",
  "message": "No user with ID 12345",
  "code": "USER_NOT_FOUND"
}

Response Headers: Belangrijke:

  • Retry-After — hoe lang wachten voor een retry (429, 503)
  • Allow — geldige HTTP-methods (405)
  • Location — waar naartoe redirecten (3xx)
  • WWW-Authenticate — hoe te authenticeren (401)

Stap 4: onderneem actie op basis van de codeklasse#

4xx Client Error:

  • Verkeerde data verstuurd? Fix de request
  • Typfout in URL? Corrigeer het
  • Geen permissie? Vraag toegang aan
  • Verkeerd endpoint? Check de documentatie

5xx Server Error:

  • Draait de server? Check uptime
  • Tonen de logs fouten? Fix de fout
  • Is upstream down? Wacht op herstel
  • Is er net gedeployed? Rollback indien nodig

Praktijkvoorbeeld: een 502 Bad Gateway debuggen#

Scenario:

GET /api/checkout
Response: 502 Bad Gateway
Customers can't complete purchases

Stap 1: bevestig dat het een 502 is ✓ Response-header toont HTTP/1.1 502 Bad Gateway

Stap 2: check wat 502 betekent ✓ Upstream-server reageert niet correct

Stap 3: diagnosticeer het probleem

Draaien de backend-services?

docker ps
# Output: checkout-service is not running

✗ Checkout-service is gecrasht

Stap 4: vind de root cause

Check de logs:

docker logs checkout-service
# Out of memory error!
# Java heap space exhausted

Stap 5: fix het

Verhoog het geheugen:

docker-compose up -d --build

Of herstart:

docker restart checkout-service

Stap 6: verifieer

curl -i https://api.example.com/api/checkout
# HTTP/1.1 200 OK ✓

Status codes realtime monitoren#

Waarom je ze moet monitoren#

  • Detecteer downtime voordat klanten het melden
  • Vang 5xx-fouten op die alleen bepaalde endpoints raken
  • Track 4xx-fouten om API-misbruik te vinden
  • Monitor 429 rate limits zodat je weet wanneer je moet schalen

Wat je moet monitoren#

Critical (paging als het down is):

  • Elke 5xx-fout op kritieke endpoints (checkout, login, payment)

Belangrijk (onderzoeken):

  • Piek in 429-fouten (rate limiting betekent dat je tegen je capaciteit aan zit)
  • Toename van 502/504-fouten (upstream-degradatie)
  • Toename van 403/401-fouten (mogelijk een brute-force-aanval)

Informatief (trends bijhouden):

  • 404-fouten (verkeerde URL's worden opgevraagd?)
  • 400-fouten (clients sturen misvormde requests?)

Nova Uptime gebruiken om status codes te monitoren#

Nova Uptime's uptime monitoring volgt HTTP status codes realtime:

  1. Monitors geven 200? Site is up ✓
  2. Monitors geven 404? Verkeerde URL of endpoint verwijderd ✗
  3. Monitors geven 429? Je wordt rate-limited ⚠️
  4. Monitors geven 502/503? Backend-issue ✗
  5. Monitors geven 504? Timeout, optimalisatie nodig ⚠️

Nova Uptime laat je zien:

  • Welke status codes worden teruggegeven
  • Wanneer ze begonnen op te treden
  • Welke endpoints geraakt zijn
  • Trend over tijd

HTTP Status Codes en SEO#

Zoekmachines gebruiken status codes om te beslissen hoe ze pagina's indexeren:

200 OK: indexeer deze pagina (normaal)

301 Moved Permanently: update index om naar de nieuwe URL te wijzen

302 Found: houd oude URL in de index, volg de redirect niet

304 Not Modified: niet opnieuw crawlen, laatste versie is actueel

401/403: niet indexeren (toegang geweigerd)

404 Not Found: uit index verwijderen (pagina is weg)

410 Gone: uit index verwijderen (pagina is weg, komt niet terug)

429/503/504: later opnieuw proberen (tijdelijk probleem)

5xx-fouten: mogelijk siteprobleem; Google vertraagt het crawlen

Belangrijk voor de gezondheid van je site:

  • Gebruik 301 voor permanente URL-wijzigingen (behoudt SEO-waarde)
  • Gebruik 410 om Google expliciet te vertellen dat een pagina weg is
  • Los 5xx-fouten snel op (Google geeft kapotte sites lagere prioriteit)
  • Gebruik robots.txt om 404's op niet-indexeerbare content te voorkomen

Samenvatting: HTTP Status Codes quick reference#

Alles in orde:

  • 200 OK — normaal succes
  • 201 Created — nieuwe resource gemaakt
  • 204 No Content — geslaagd, geen response nodig

Redirect ergens anders heen:

  • 301/302 — volg redirect naar de nieuwe URL
  • 304 — gebruik de gecachete versie

Jij hebt iets fout gedaan:

  • 400 Bad Request — fix de request-opmaak
  • 401 Unauthorized — lever authenticatie
  • 403 Forbidden — je hebt geen permissie
  • 404 Not Found — verkeerde URL
  • 429 Too Many Requests — rustig aan, je wordt rate-limited

Wij hebben iets fout gedaan:

  • 500 Internal Server Error — check serverlogs
  • 502 Bad Gateway — backend-service is down
  • 503 Service Unavailable — server tijdelijk down
  • 504 Gateway Timeout — backend is te traag

Monitoring met Nova Uptime: Nova Uptime's HTTP-monitoring vangt deze fouten direct op en alert je voordat klanten het merken. Monitor kritieke endpoints, track trends in status codes en krijg alerts wanneer 5xx-fouten pieken.


Laatste update: 20 februari 2026 Nova Uptime monitort HTTP status codes over 50+ check-types en alert in realtime op 5xx-fouten

Monitor Your Website Before It Goes Down

Get uptime monitoring, SSL tracking, domain expiry alerts, and email health checks. Free plan — no credit card required.

Start Monitoring Free