HTTP-statuscodes

De codes die je het vaakst ziet bij API’s en CDN’s. Zeldzame experimentele codes ontbreken.

Bijgewerkt:

CodeNaamBetekenis
200OKSucces met inhoud
201AangemaaktResource aangemaakt
204Geen inhoudSucces, lege inhoud
301Permanent verplaatstPermanente omleiding
302GevondenTijdelijke omleiding
304Niet gewijzigdGebruik cache-kopie
400Ongeldig verzoekClientverzoek ongeldig
401Niet geautoriseerdAuthenticatie vereist of mislukt
403VerbodenGeauthenticeerd maar geweigerd
404Niet gevondenResource bestaat niet
405Methode niet toegestaanVerkeerde HTTP-methode
408Time-out verzoekClient te traag
409ConflictStatusconflict
410VerdwenenPermanent verwijderd
422Niet verwerkbare entiteitSemantiek ongeldig
429Te veel verzoekenSnelheidslimiet
500Interne serverfoutServerfout
502Ongeldige gatewayUpstream-antwoord ongeldig
503Dienst niet beschikbaarOverbelast of niet beschikbaar
504Gateway-time-outUpstream-time-out

Opmerkingen

De vijf klassen van statuscodes

Het eerste cijfer geeft aan wie verantwoordelijk is en grofweg wat er is gebeurd. 1xx zijn informatief en worden zelden door clients gezien. 2xx betekenen succes — 200 OK met een lichaam, 204 Geen inhoud zonder lichaam, 206 voor een gedeeltelijke download. 3xx betekenen dat de bron ergens anders staat. 4xx betekenen dat het verzoek zelf foutief is: slechte syntaxis, ontbrekende referenties of een snelheidslimiet. 5xx betekenen dat de server is mislukt hoewel het verzoek in orde was. Alleen naar het eerste cijfer kijken vertelt je al of je de client moet repareren of naar de serverkant moet escaleren.

De juiste redirect kiezen

301 en 308 betekenen allebei permanent; 302 en 307 betekenen beide tijdelijk. Het verschil zit in hoe de methode wordt behandeld: 301 en 302 lieten clients historisch gezien een POST omzetten in een GET, terwijl 307 en 308 de oorspronkelijke methode en het lichaam behouden, wat belangrijk is voor API's en formulierverzendingen. Gebruik 301 voor een URL die echt voorgoed is verplaatst, en 302 of 307 voor tijdelijke omleidingen zoals onderhoudspagina's of A/B-tests. Pas op voor chains — elke extra sprong kost latentie en link equity, dus leid direct door naar de bestemming.

4xx-fouten sorteren

401 betekent dat authenticatie ontbreekt of is mislukt, dus het verzenden van geldige referenties kan het oplossen; 403 betekent dat het verzoek is begrepen en geauthenticeerd maar niet is toegestaan, en opnieuw proberen met dezelfde referenties helpt niet. 404 betekent dat de bron niet bestaat; 410 geeft aan dat deze eerder wel bestond en expres verwijderd is. 429 betekent dat je een snelheidslimiet hebt bereikt en moet terugpakken, waarbij je een Retry-After header moet respecteren. 400 betekent meestal onjuist ingevoerde gegevens, 405 betekent dat de methode niet past bij die URL, en 422 betekent dat de syntaxis juist was maar de inhoud de validatie niet doorstond.

5xx-codes lezen

500 is een algemene interne fout; 502 Slechte gateway betekent dat een upstream-server iets onbruikbaars terug gaf; 503 betekent dat de service tijdelijk niet beschikbaar is of overbelast; 504 betekent dat een upstream uitgekookt is. Dit zijn de problemen van de server, niet van de afroeper, dus de oplossing is opnieuw proberen met backoff, de gezondheid van upstream controleren, of belasting verminderen. Een CDN kan 502, 503 of 504 uitgeven namens een oorsprong die het niet kan bereiken, daarom kan dezelfde fout van twee heel verschillende plekken komen — controleer de server- en cache-statusheaders om te ontdekken welke.

Statuscodes in de praktijk: API's en caching

Twee dagelijkse toepassingen verdienen aandacht. Ten eerste caching: 200 met een Cache-Control-header kan worden opgeslagen, 304 Niet gewijzigd vertelt de client zijn kopie te hergebruiken, en een 5xx mag niet worden gecached. Ten tweede API's: een POST die een resource maakt moet 201 teruggeven met een Location-header, DELETE levert vaak 204 op, en een PATCH die niets verandert kan 200 of 204 teruggeven. Welgedragende clients verdelen eerst op klasse (2xx, 4xx, 5xx) en pas daarna op de exacte code, waardoor retry- en backoff-logica eenvoudig en voorspelbaar blijft.

Veelgestelde vragen

Wat betekent HTTP 403?
403 betekent dat de server het verzoek heeft begrepen en geauthenticeerd, maar de toegang weigert. In tegenstelling tot 401 helpt opnieuw inloggen niet.
Wat is het verschil tussen de HTTP-redirects 301 en 302?
301 is een permanente verhuizing: clients en zoekmachines moeten voortaan de nieuwe URL gebruiken. 302 is tijdelijk en de oude URL blijft geldig.
Wat betekent HTTP 429 en hoe los je het op?
429 betekent dat je een snelheidslimiet hebt bereikt. Verlaag het aantal verzoeken en volg de Retry-After-header als de server die meestuurt.

Bronnen