Ga naar hoofdinhoud

Statuscodes

Elke response begint met drie cijfers die zeggen hoe het afliep:

HTTP/1.1 404 Not Found

Die code is het snelste diagnosemiddel dat je hebt. Nog voor je de body openklapt, weet je of het verzoek gelukt is, of je ergens anders moet zijn, of je zelf een fout maakte, of de server het liet afweten.

Het eerste cijfer zegt het meeste​

CategorieBereikBetekenisWie moet er iets aan doen
1xx Informatief100–199Tussenstand, zelden zichtbaarNiemand
2xx Succes200–299GeluktNiemand
3xx Omleiding300–399De bron zit elders, of is niet gewijzigdDe client volgt automatisch
4xx Clientfout400–499Er is iets mis met jouw verzoekJij
5xx Serverfout500–599De server kon het niet verwerkenDe beheerder van de server

Die laatste kolom is de kern. Zie je een 4xx, kijk dan naar je eigen request: klopt de URL, de methode, de headers, de body? Zie je een 5xx, dan is er weinig aan je request te repareren; het probleem zit aan de overkant.

2xx: gelukt​

CodeNaamWanneer je ze ziet
200OKDe standaard: gevonden en meegestuurd
201CreatedNa een POST die iets aanmaakte; het adres van de nieuwe bron staat in de Location-header
204No ContentGelukt, maar er valt niets te tonen. Typisch na een DELETE

3xx: elders, of ongewijzigd​

CodeNaamWanneer je ze ziet
301Moved PermanentlyDefinitief verhuisd. Browsers en zoekmachines onthouden het nieuwe adres
302FoundTijdelijk elders. Het oude adres blijft het juiste
304Not ModifiedNiets veranderd sinds je vorige bezoek: gebruik je eigen kopie

Bij 301 en 302 staat het nieuwe adres in de Location-header, en volgt je browser die automatisch. In de Network tab zie je dat enkel als Preserve log aanstaat; anders is de eerste regel al weg voor je kijkt.

301 of 302?

Gebruik 301 bij een echte verhuizing, bijvoorbeeld van http:// naar https:// of na een herstructurering van je URL's. Gebruik 302 voor iets tijdelijks, zoals een onderhoudspagina of een omleiding naar een inlogscherm. Een verkeerde 301 is lastig: browsers onthouden ze, ook nadat je de fout hersteld hebt.

304 heb je al gezien bij het bekijken van netwerkverkeer: het is de code die verschijnt bij een tweede refresh, met disk cache in de kolom Size.

4xx: jouw verzoek klopt niet​

CodeNaamEerste controle
400Bad RequestIs je JSON geldig? Staat Content-Type correct?
401UnauthorizedStuur je een Authorization-header of een geldige sessie mee?
403ForbiddenJe bent herkend, maar mag dit niet. Klopt je rol of je token?
404Not FoundKlopt het pad? Bestaat het id dat je opvraagt?
405Method Not AllowedBestaat het pad wel, maar niet met deze methode?
409ConflictBestaat het al, bijvoorbeeld een gebruiker met dat e-mailadres?
429Too Many RequestsTe veel verzoeken. Kijk naar de Retry-After-header
401 versus 403

401 betekent: ik weet niet wie je bent, meld je aan. 403 betekent: ik weet wie je bent, en je mag dit niet. Krijg je 401 terwijl je zeker ingelogd bent, controleer dan of je token effectief meegestuurd wordt: in de Network tab, bij Request Headers.

5xx: de server liet het afweten​

CodeNaamWat er meestal aan de hand is
500Internal Server ErrorEen onverwerkte fout in de servercode
502Bad GatewayEen proxy of load balancer kreeg onzin van de server erachter
503Service UnavailableOverbelast of in onderhoud
504Gateway TimeoutDe server erachter antwoordde niet op tijd

Bij 502, 503 en 504 is er een tussenpersoon in het spel: nginx, een load balancer, een cloudplatform. De vraag raakte tot daar, maar de eigenlijke applicatie antwoordde niet of niet correct.

Test jezelf: welke categorie?​

1.201 Created na een POST naar /posts
2.404 Not Found op /api/gebruikers
3.500 Internal Server Error na het versturen van een formulier
4.301 Moved Permanently van http:// naar https://
5.Je vergat de Authorization-header en krijgt 401
6.304 Not Modified bij een tweede refresh van dezelfde pagina
7.503 Service Unavailable tijdens een onderhoudsvenster
8.204 No Content na een geslaagde DELETE

Statuscodes aflezen​

In de Network tab staat de code in de kolom Status, en bovenaan bij Headers → General. Met curl heb je twee handige vormen:

curl -I https://voorbeeld.be # Enkel de statuslijn en de headers
curl -o /dev/null -s -w "%{http_code}\n" https://voorbeeld.be # Enkel het getal

De tweede is bruikbaar in scripts: -o /dev/null gooit de body weg, -s onderdrukt de voortgangsbalk, en -w drukt enkel de code af.

Volg een omleiding tot het einde

curl volgt standaard geen omleidingen. Met -L doet hij dat wel, en met -v zie je elke tussenstap:

curl -IL http://ap.be

Je ziet dan eerst een 301 met een Location-header, en pas daarna de 200 van de uiteindelijke pagina.

Alles op één blad. De kleur zegt meteen wie er iets aan moet doen: groen en amber vragen niets van jou, rood wijst naar jouw request, donker naar de server.

Overzicht van de vijf categorieën HTTP-statuscodes, met per categorie de belangrijkste codes en waar je het probleem zoekt1xxInformatiefWAAR ZOEK JE?Nergens. Een tussenstanddie de browser zelfafhandelt.100Continue101Switching Protocols2xxGeluktWAAR ZOEK JE?Nergens: het werkte.Kijk hoogstens of de bodybevat wat je verwacht.200OK201Created204No Content3xxOmleidingWAAR ZOEK JE?In de Location-header:daar staat het nieuweadres.301Moved Permanently302Found304Not Modified4xxFout in jouw verzoekWAAR ZOEK JE?Bij jouw request:URL, methode, headersen body.400Bad Request401Unauthorized403Forbidden404Not Found5xxFout bij de serverWAAR ZOEK JE?Bij de server, of bij eentussenpersoon zoals eenproxy of load balancer.500Internal Server Error502Bad Gateway503Service Unavailable504Gateway Timeout
Onthoud
  • 2xx gelukt, 3xx omleiding, 4xx fout in jouw verzoek, 5xx fout bij de server.
  • Ken minstens: 200, 201, 204, 301, 302, 304, 400, 401, 403, 404, 500, 503.
  • 401 = niet aangemeld, 403 = aangemeld maar geen toegang.
  • Bij een omleiding staat het nieuwe adres in de Location-header; zet Preserve log aan om ze te zien.
  • Een 4xx repareer je zelf, bij een 5xx kijk je naar de server.