Ein 401 und ein 403 bedeuten beide, dass Sie die Seite nicht erhalten haben, und sie werden ständig verwechselt, sowohl in Fehlermeldungen als auch in Fehlerberichten. Der Unterschied zwischen ihnen ist klein zum Lesen und groß zum Handeln: Einer bezieht sich darauf, wer Sie sind, der andere darauf, was Sie tun dürfen.

Wenn Sie sie verwechseln, versuchen Sie, das Falsche zu reparieren. Hier ist also die Unterscheidung, was jede aussagt, und wie Sie feststellen, welche Sie tatsächlich vor sich haben.

The one-line version

401 Unauthorized bedeutet, dass der Server nicht weiß, wer Sie sind. Sie sind nicht angemeldet, oder die Anmeldedaten, die Sie gesendet haben, fehlten, waren falsch oder abgelaufen. Melden Sie sich ordnungsgemäß an, und die Anfrage würde erfolgreich sein.

403 Forbidden bedeutet, dass der Server genau weiß, wer Sie sind, und Sie dürfen trotzdem nicht. Sie sind angemeldet, Ihre Anmeldedaten sind in Ordnung, und dieses bestimmte Konto darf diese bestimmte Aktion einfach nicht ausführen. Sich erneut anzumelden ändert nichts, da angemeldet zu sein nie das Problem war.

Einfach gesagt: 401 ist “Ich kenne Sie nicht”, 403 ist “Ich kenne Sie, und nein”.

Die Formulierung ist ein historischer Zufall, der dies verschlimmert. 401 wird als “Unauthorized” bezeichnet, obwohl es wirklich nicht authentifiziert bedeutet - der Server konnte nicht feststellen, wer Sie sind. 403 ist derjenige, der tatsächlich um Autorisierung geht. Die Namen sind aus Kompatibilitätsgründen festgelegt, also lesen Sie über sie hinweg, um zu sehen, was jeder Code tut.

How to tell which you have

Überprüfen Sie, ob Sie angemeldet sind, wenn es passiert.

Wenn Sie abgemeldet sind, oder wenn die Anfrage kein Session-Cookie oder Token trug, ist 401 die erwartete und richtige Antwort, und die Lösung ist sich zu authentifizieren. Wenn die gleiche Anfrage funktioniert, sobald Sie sich anmelden, war es nur ein 401.

Wenn Sie angemeldet sind - ordnungsgemäß, mit einer Sitzung, die der Server anderswo akzeptiert - und eine bestimmte Aktion oder Seite gibt den Fehler zurück, schauen Sie auf einen 403. Das Konto ist authentifiziert und die Antwort ist trotzdem nein. Sich ab- und wieder anzumelden, Cookies zu löschen oder einen anderen Browser zu versuchen, wird es nicht ändern, und jedes davon ist eine häufig verschwendete halbe Stunde, in der man einen 403 behandelt, als wäre er ein 401.

Eine Falle, die es wert ist, genannt zu werden: Einige Server geben absichtlich 404 Not Found zurück, wenn sie 403 meinen, um nicht zu bestätigen, dass eine Ressource überhaupt existiert. Wenn eine URL, von der Sie wissen, dass sie real ist, nur als “nicht gefunden” zurückkommt, wenn Sie keine Berechtigung dafür haben, ist die wahre Antwort ein 403 in Verkleidung.

If it is your site

Welcher Code Sie senden, ist eine Entscheidung, keine Kleinigkeit, denn er teilt der Person auf der anderen Seite mit, welches von zwei sehr unterschiedlichen Problemen sie haben.

Senden Sie 401, wenn die Anfrage nicht authentifiziert ist - keine Anmeldedaten oder welche, die der Server nicht überprüfen kann - und fügen Sie einen WWW-Authenticate-Header ein, damit der Client weiß, wie sich anmelden soll. Ein 401 ist eine Einladung, sich zu authentifizieren und es erneut zu versuchen.

Senden Sie 403, wenn die Anfrage authentifiziert, aber nicht erlaubt ist. Der Benutzer ist, wer er sagt, dass er ist, und dieses Konto darf dies nicht tun. Antworten Sie nicht mit 401, denn 401 sagt ihnen, sich erneut anzumelden, und sie werden es, und es wird wieder fehlschlagen, und die Schleife lehrt sie nichts außer dass Ihre Website fehlerhaft ist.

Die häufigste Ursache für einen 403 auf Ihrer Website ist eine Berechtigungs- oder Rollenprüfung: ein Benutzer, der eine Admin-Route erreicht, ein API-Schlüssel ohne Umfang für einen Endpunkt, ein Objekt, das zu einem anderen Konto gehört. Die häufigste Ursache für einen unerwarteten 401 ist eine Sitzung oder ein Token, der abgelaufen ist, ohne dass das Frontend es bemerkt hat, sodass es weiterhin Anmeldedaten sendet, die der Server nicht mehr akzeptiert.

Why these are worth capturing rather than describing

“Ich bekam einen Fehler und es ließ mich nicht rein” ist der Bericht, den Sie normalerweise bekommen, und er passt gleich gut zu beiden Codes, was genau der Grund ist, warum er nicht hilft. Ein 401 und 403 sehen für einen Benutzer identisch aus - eine Seite, die sie wollten und nicht bekamen - und die eine Information, die sie unterscheidet, der Statuscode, ist die, an die eine Person fast nie denkt zu lesen.

Die Anfrage selbst trägt die Antwort: den Status, ob Anmeldedaten damit gesendet wurden, und was der Server zurück sagte. Im Moment des Fehlers erfasst, verwandelt dies “es ließ mich nicht rein” in “ein 403 auf diesem Endpunkt, während ich als dieses Konto angemeldet bin”, was ein Berechtigungsfehler ist, den jemand finden kann - anstelle eines Anmeldungsproblems, das jemand zuerst eine Stunde lang verfolgen wird.

Session Replay

Kostenlose Chrome-Erweiterung. Ein Klick auf die Seite, die sich falsch verhält, erfasst den Screenshot, die Konsole und das Netzwerkprotokoll und gibt Ihnen einen Link zum Einfügen in das Ticket.

Erweiterung abrufen

Das Netzwerkprotokoll enthält die fehlgeschlagene Anfrage mit ihrem Status und ob Anmeldedaten damit gesendet wurden, sodass jeder, der den Bericht aufgreift, auf einen Blick sehen kann, ob er einen 401 oder 403 vor sich hat - und nicht den Anmeldestatus reproduzieren muss, um es herauszufinden. Um zu überprüfen, ob eine URL derzeit einen davon zurückgibt, fordert der HTTP-Status-Checker sie an und meldet den zurückgegebenen Code.

In one paragraph

Ein 401 Unauthorized bedeutet, dass der Server nicht weiß, wer Sie sind, und Sie sollten sich authentifizieren; ein 403 Forbidden bedeutet, dass er genau weiß, wer Sie sind, und Sie dürfen trotzdem nicht, also hilft sich erneut anzumelden nicht. Unterscheiden Sie sie danach, ob Sie angemeldet waren, als es passierte, senden Sie die richtige von Ihrer Website, damit niemand in eine Anmeldeschleife für ein Berechtigungsproblem gesendet wird, und erfassen Sie die fehlgeschlagene Anfrage, anstatt sie zu beschreiben, denn der Statuscode ist die ganze Antwort und das eine, was ein Benutzer nie liest.