wahsaga: Welcher HTTP Status Code bei fehlender Berechtigung?

Beitrag lesen

hi,

Nun stellt sich mir die Frage, welcher HTTP Status Code am besten für die Auslieferung des Formulars zur Anmeldung gewählt werden sollte.

403 Forbidden schien mir anfangs die richtige Wahl zu sein. In der HTTP Spezifikation [1] steht allerdings der folgende Satz:

"Authorization will not help and the request SHOULD NOT be repeated."

Nun ja, _HTTP_ Authorization wird in deinem Szenario wirklich nicht helfen - es ist also unsinnig, den gleichen Request noch mal zu machen.
Wenn der Nutzer seine Login-Daten per Formular schickt, ist es aber nicht mehr der gleiche Request.

Aber "Authorization will not help" an sich ist ja schon widersprüchlich, bzw. geht an der Praxis vorbei.
Eine per HTTP Auth geschützte Ressource wird nach mehrmaligem Request mit den falschen Auth-Daten auch in aller Regel mit einem 403 quitiert; aber natürlich würde Authorization helfen - wenn sie denn nur endlich mal richtig wäre.

Ich halte das "and the request SHOULD NOT be repeated" eher für eine reine "Anweisung" auf HTTP-Ebene: Es ist sinnlos, dass der HTTP-Client den Request absolut identisch aus eigenem Ermessen erneut absetzt - anders, als bspw. bei einem 503, "Service [temporarily] Unavailable".
Wenn der Nutzer den Request aber erneut absetzt, nachdem er seine Login-Daten eingetippt hat - dann wäre das nach meinem Dafürhalten OK.

Kann ich 403 Forbidden ohne Bedenken nutzen,

Ganz ohne nicht, mit ein bisschen Bedenken aber m.E. Ja :-)

oder gibt es einen anderen Status, der hier besser passt?

402, "Payment Required"? *g*

Vielleicht noch ein 409, "Conflict":

"The request could not be completed due to a conflict with the current state of the resource. This code is only allowed in situations where it is expected that the user might be able to resolve the conflict and resubmit the request. The response body SHOULD include enough information for the user to recognize the source of the conflict."

current state - Nutzer leider nicht eingeloggt
user might be able to resolve the conflict - natürlich, muss sich ja nur einloggen
response body SHOULD include enough information for the user to recognize the source of the conflict - na die Info bekommt er, und ein "Werkzeug" zur Behebung des Konfliktes, das Formular, auch gleich dazu

Allerdings dürfe der 409 ein eher "exotischer" Response sein - müsste man erst mal rausfinden, wie die Browser mit dem umgehen.

In so fern stimme ich Johannes eigentlich zu - ein simpler 200er macht hier auch nix kaputt.

gruß,
wahsaga

--
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }