Ga naar inhoud

HTTP-statuscodes

Een HTTP-antwoord begint met een driecijferige code en een korte redenfrase. Het eerste cijfer is de hele samenvatting: 1xx is voorlopig, 2xx is geslaagd, 3xx wijst ergens anders, 4xx beschuldigt het verzoek, 5xx beschuldigt de server. Als je dat onthoud, kun je een logbestand lezen dat je nog nooit hebt gezien.

De redenfrasen hier zijn die uit de RFC's, in het Engels, omdat dat is wat op de draad reist — een server stuurt "Not Found", niet een vertaling ervan, en een frase die je in een logboek zoekt, moet overeenkomen met de bytes die daadwerkelijk werden verzonden.

De onderscheidingen die echte problemen veroorzaken, zijn binnen de klassen in plaats van ertussen: 401 versus 403, 301 versus 308, en 502 versus 503 antwoorden elk een andere vraag over wat te doen, en elk wordt routineus voor het ander gebruikt.

1xx — Informatief

3

Voorlopig: het antwoord is niet definitief en er volgt nog een.

CodeRedenfraseWat het betekent
100ContinueHeaders ontvangen, ga door met het verzenden van de body.
101Switching ProtocolsSwitching protocols — de WebSocket-handshake.
103Early HintsEarly hints: laat deze bronnen voorladen terwijl het echte antwoord wordt voorbereid.

2xx — Succes

5

Het verzoek werd ontvangen, begrepen en aanvaard.

CodeRedenfraseWat het betekent
200OKSucces, met een body.
201CreatedGemaakt.Moet een Location-header bevatten die naar de nieuwe bron wijst.
202AcceptedAanvaard voor verwerking, die nog niet heeft plaatsgevonden.
204No ContentSucces, en opzettelijk geen body.Het juiste antwoord op een DELETE, of op een opslagactie die niets terug te geven heeft.
206Partial ContentGedeeltelijke inhoud — het antwoord op een Range-verzoek. Herbruikbare downloads.

3xx — Omleiding

6

De bron is elders, of uw cachecopie is nog steeds goed.

CodeRedenfraseWat het betekent
301Moved PermanentlyPermanent verplaatst. Werk uw koppelingen bij; caches mogen dit voor altijd behouden.
302FoundGevonden — een temporaire omleiding.Veel geïmplementeerd als overschakeling naar GET, wat 307 fixes.
303See OtherZie ander: haal het resultaat op met GET. De omleiding na een POST-formulier.
304Not ModifiedNiet gewijzigd — uw cachecopie is actueel. Verzonden zonder body.
307Temporary RedirectTemporaire omleiding, methode en body behouden.
308Permanent RedirectPermanente omleiding, methode en body behouden.

4xx — Clientfout

14

Het verzoek is het probleem. Het herhaald onveranderd mislukken zal opnieuw mislukken.

CodeRedenfraseWat het betekent
400Bad RequestDe server kon het verzoek helemaal niet parseren.
401UnauthorizedNiet geverifieerd — de server weet niet wie je bent.Genaamd Unauthorized, maar het betekent niet-geverifieerd. Moet WWW-Authenticate bevatten.
403ForbiddenGeverifieerd en nog steeds niet toegestaan. Betere inloggegevens helpen niet.
404Not FoundGeen dergelijke bron, en de server zegt niet of er ooit was.
405Method Not AllowedVerkeerde methode voor deze URL.Moet degenen die werken in een Allow-header vermelden.
406Not AcceptableNiets beschikbaar in een formaat dat uw Accept-header aanneemt.
409ConflictConflicteert met de huidige staat — een bewerking tegen een verouderde versie.
410GoneVerdwenen: het bestond en werd opzettelijk verwijderd. Sterker dan 404.
413Content Too LargeDe body is groter dan de server aanvaardt.
415Unsupported Media TypeDe server verwerkt dit Content-Type niet.
418I'm a teapotIk ben een theepot. Een 1998 Aprilgrap, permanent gereserveerd.
422Unprocessable ContentGoed geparst, inhoud ongeldig — een ontbrekend veld, een slechte waarde.
429Too Many RequestsSnelheid beperkt.Kijk naar Retry-After voordat u opnieuw probeert, en zet terug exponentieel.
451Unavailable For Legal ReasonsGeblokkeerd om juridische redenen. Het getal is een knipoog naar Fahrenheit 451.

5xx — Serverfout

6

Het verzoek kan in orde zijn. Dit zijn de waard om opnieuw te proberen.

CodeRedenfraseWat het betekent
500Internal Server ErrorEen onbehandelde fout op de server. Niets om aan uw kant te herstellen.
501Not ImplementedDe server implementeert deze methode helemaal niet.
502Bad GatewayEen proxy bereikt de upstream-server en kreeg iets onbruikbaars terug.
503Service UnavailableOpzettelijk niet serveren — overbelast of in onderhoud.De status die Retry-After moet dragen.
504Gateway TimeoutEen proxy gaf het wachten op de upstream-server op.
505HTTP Version Not SupportedDe HTTP-versie in het verzoek wordt niet ondersteund.

FAQ

Wat is het verschil tussen 401 en 403?
401 Unauthorized betekent dat het verzoek niet geverifieerd werd — de server weet niet wie je bent, en een juiste 401 bevat een WWW-Authenticate-header die je vertelt hoe je het kunt bewijzen. 403 Forbidden betekent dat het precies weet wie je bent en je mag dit nog niet hebben. Het opnieuw proberen van een 403 met betere inloggegevens voor dezelfde identiteit helpt niet.
Moet ik 301 of 308 voor een omleiding gebruiken?
308 als de methode van belang is. Historisch werden 301 en 302 veel geïmplementeerd als "omleiding en overschakelen naar GET", wat stilzwijgend een POST in een GET verandert. 307 en 308 werden geïntroduceerd om te beloven dat de methode en body worden behouden. Voor een permanente verhuizing van een pagina die alleen ooit wordt opgehaald, blijft 301 de best begrepen keuze.
Wat betekent 422 dat 400 niet betekent?
400 Bad Request betekent dat de server het verzoek helemaal niet kon begrijpen — misvormde JSON, een kapotte header. 422 Unprocessable Content betekent dat het goed geparst is en de inhoud toch fout is: een goed gevormde body met een ontbrekend vereist veld of een datum in het verleden. De splitsing is nuttig precies omdat de fix van de klant in elk geval anders is.
Is 418 een echte statuscode?
Het is echt in die zin dat het is geregistreerd en elke HTTP-bibliotheek kent het, en een grap in dat het afkomstig is van het 1998 Aprilgrap Hyper Text Coffee Pot Control Protocol. Pogingen om het getal voor praktisch gebruik terug te vorderen werden afgewezen, dus het is permanent gereserveerd voor theepotten.
Waarom verschilt 503 van 502?
502 Bad Gateway betekent dat een proxy de upstream-server bereikt en iets onbruikbaars terugkreeg. 503 Service Unavailable betekent dat de server zelf nu opzettelijk niet wordt bediend — overbelast of in onderhoud — en het is degene die een Retry-After-header moet dragen, omdat het degene is die naar verwachting herstelt.