RFC 2616 , das Dokument, das HTTP / 1.1 definiert, enthält die Definitionen aller HTTP-Statuscodes. Für 403 Forbidden
, heißt es :
Der Server hat die Anfrage verstanden, weigert sich jedoch, sie zu erfüllen. Die Autorisierung hilft nicht und die Anfrage sollte nicht wiederholt werden. Wenn die Anforderungsmethode nicht HEAD war und der Server veröffentlichen möchte, warum die Anforderung nicht erfüllt wurde, sollte der Grund für die Ablehnung in der Entität beschrieben werden. Wenn der Server diese Informationen dem Client nicht zur Verfügung stellen möchte, kann stattdessen der Statuscode 404 (Nicht gefunden) verwendet werden.
Drupal verwendet es jedoch nicht so: Je nach Fall wird es entweder für die Standardbedingung in Rückrufen (z. B. shortcut_link_add_inline()
) verwendet - im Wesentlichen 403 Forbidden
gleichbedeutend mit "Drupal versteht die Anforderung nicht" - oder es wird verwendet, um den Client darüber zu informieren hat keinen Zugriff auf die Seite (dh aufgrund von Berechtigungen wie anonymer Benutzer).
Im ersteren Fall ("die Anfrage wird nicht verstanden") lautet der geeignetere Statuscode 400 Bad Request
:
Die Anforderung konnte vom Server aufgrund einer fehlerhaften Syntax nicht verstanden werden. Der Client sollte die Anfrage NICHT ohne Änderungen wiederholen.
Und im letzteren Fall ("der Client hat aufgrund von Berechtigungen keinen Zugriff auf die Seite") sollte dies auch der Fall sein 401 Unauthorized
(wenn Drupal verraten möchte, dass es sich nur um ein Berechtigungsproblem handelt):
Die Anforderung erfordert eine Benutzerauthentifizierung. Die Antwort MUSS ein WWW-Authenticate-Headerfeld (Abschnitt 14.47) enthalten, das eine Herausforderung enthält, die für die angeforderte Ressource gilt. Der Client kann die Anforderung mit einem geeigneten Feld für den Autorisierungsheader wiederholen (Abschnitt 14.8). Wenn die Anforderung bereits Berechtigungsnachweise enthielt, zeigt die Antwort 401 an, dass die Berechtigung für diese Anmeldeinformationen verweigert wurde.
oder 404 File Not Found
(wenn nicht):
Der Server hat nichts gefunden, das mit dem Request-URI übereinstimmt. Es wird kein Hinweis darauf gegeben, ob der Zustand vorübergehend oder dauerhaft ist. Der Statuscode 410 (Gone) SOLLTE verwendet werden, wenn der Server über einen intern konfigurierbaren Mechanismus weiß, dass eine alte Ressource dauerhaft nicht verfügbar ist und keine Weiterleitungsadresse hat. Dieser Statuscode wird häufig verwendet, wenn der Server nicht genau angeben möchte, warum die Anforderung abgelehnt wurde, oder wenn keine andere Antwort zutreffend ist.
Hervorhebung von mir (siehe auch den letzten Satz in der Definition für 403 Forbidden
).
Mir ist klar, dass es seit vielen Jahren so ist, aber was war der ursprüngliche drupal_access_denied()
Grund, um 403 Forbidden
- und im weiteren Sinne - die einzige Antwort zu geben, die Drupal sendet, wenn es eine Anfrage erhält, die es nicht mag?
401 Unauthorized
, aber wenn Drupal keinWWW-Authenticate
Header-Feld senden möchte ,403 Forbidden
ist dies nicht der Fallback: Es403 Forbidden
handelt sich um einen dauerhaften Fehler, und wie es heißt, "Autorisierung hilft nicht".